No Linux, como truncar a saída da linha de comando?

56

Se eu estiver grep -nr sumthin *no meu diretório de código-fonte, ele também expelirá linhas muito longas de arquivos JavaScript ou CSS minificados. Quero obter apenas os primeiros 80 caracteres por linha.

Por exemplo, um regular grepme dá o seguinte:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:10px;z-index:13;}.arrow2{cursor:pointer;position:absolute;right:5px;bottom:10px;z-index:13;}.calendarModule{z-index:100;}.calendarFooterContainer{height:25px;text-align:center;width:100%!important;z-index:15;position:relative;font-size:15px!important;padding:-2px 0 3px 0;clear:both!important;border-left:1px solid #CCC;border-right:1px  ... etc.

mas eu gostaria de obter apenas isso:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:

Qual comando do Linux pode fazer isso?

Nikki Erwin Ramirez
fonte
"minificado"? O que isso significa?
CarlF
Obrigado. O link correto é en.wikipedia.org/wiki/Minification_%28programming%29
CarlF
Ambos os links levam à mesma página para mim.
22413 Victor Victor

Respostas:

80

OMG, eu esqueci totalmente cut!

grep -nr sumthin * | cut -c -80

^ faz o truque! > _ <

Nikki Erwin Ramirez
fonte
4
Isso não funciona se houver seqüências de escape ou códigos de cores; tome por exemplogit log --oneline --graph --color=always | cut -c -$COLUMNS
badp 28/01
11
Entendo que ele não trunca com exatamente 80 caracteres exibidos, mas ainda resolve o meu problema: nenhuma das linhas quebra, então você ainda vê apenas a parte inicial de cada linha (o que é importante no meu caso de uso específico, então eu pode ver a <file>:<linenumber>saída de grep -n).
Nikki Erwin Ramirez
11
Comentários longos de confirmação também meio que "interrompem" a saída do seu comando de amostra, se não estiver truncado. git log --oneline --graph --color=always | moremostrará o gráfico interrompido pelo texto quebrado. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez
sim, é por isso que eu pesquisei para esta pergunta, para começar :)
badp
5
Se o objetivo é apenas ser capaz de ver visualmente bem as coisas (não redirecionar a saída para outro lugar para uso), less -Sé o que você deseja. -Sé --chop-long-lines. Basicamente, desativa a quebra de linha
entropia
5

Diferente do que cutvocê pode usar fold(e em alguns casos fmt).
foldfaz parte do coreutilspacote.

$ echo "some very long long long text" | fold -w 5   # fold on 5 chars per line
some 
very 
long 
long 
long 
text

foldnão corta o texto restante, mas o exibe na próxima linha.

Ivan c00kiemon5ter V Kanak
fonte
Obrigado por isso, isso pode ser útil no futuro. No meu caso, eu realmente queria cortar o texto, para que o file:linenumberprefixo da grepsaída seja contíguo, para facilitar a digitalização a olho nu.
Nikki Erwin Ramirez
1

Embora não seja exatamente o que você deseja fazer, você pode usar awkpara imprimir um certo número de colunas. Você pode especificar o delimitador como ":" neste caso.

Sardathrion
fonte
Porém, não há um delimitador específico. Estou realmente cortando a saída em um comprimento específico, para ajustá-la em 1 linha no terminal.
Nikki Erwin Ramirez
@ Nikki então corte é o que você quer. Tenho certeza de que você pode fazer algo inteligente com o awk para obter a mesma coisa, mas, na verdade, cortar é mais fácil. ^ _-
Sardathrion