Por que o grep altera o tamanho das linhas de saída?

4

Costumo usar dpkg ou aptitude combinados com grep quando quero listar determinados pacotes disponíveis ou instalados no meu sistema, mas notei que quando adiciono | grep , as linhas de saída parecem um pouco diferente.

Aqui está uma% puredpkg output, o primeiro comando foi digitado quando o terminal era menor, o segundo quando o terminal foi maximizado:

Comovocêpodever,asaídadiferedependendodotamanhodajanela-osespaçossãoreduzidosnocasodeummenor.

Agora,oqueacontecequandoadicionamos|grep:

Uma parte da primeira saída foi descartada para a segunda linha. Mas quando eu maximizei o terminal e digitei o comando mais uma vez, a linha está em uma só peça. Além disso, as colunas têm o mesmo tamanho fixo (os mesmos espaços entre elas).

Esta é uma saída aptitude :

Ambos os comandos foram digitados na janela maximizada, mas a linha grep tem colunas mais estreitas e algum texto da terceira coluna foi cortado.

Por que isso acontece? Existe uma maneira de impedir que grep redimensione as linhas?

Eu não sei como adicionar uma imagem sem alterar seus parâmetros, espero que você veja o que estou falando.

    
por Mikhail Morfikov 11.01.2014 / 11:42

1 resposta

7

Não é grep alterar a saída. É dpkg e aptitude . Eles verificam se a saída vai para um terminal ou para algum outro comando.

Se for um terminal, eles adaptam sua própria largura de saída para corresponder ao tamanho do terminal.

Se a saída não for para um terminal, o comando não tem ideia de qual tamanho de coluna seria apropriado. (A saída também pode terminar em algum arquivo.)

O mesmo acontece com ls . Compare ls e ls|cat .

Não há uma maneira geral de resolver isso, mas alguns comandos podem ter opções específicas para isso. Por exemplo, aptitude tem --disable-columns e -w :

   --disable-columns
       This option causes aptitude search and aptitude versions to output
       their results without any special formatting. In particular:
       normally aptitude will add whitespace or truncate search results in
       an attempt to fit its results into vertical “columns”.
       With this flag, each line will be formed by replacing any format
       escapes in the format string with the corresponding text; column
       widths will be ignored.

   -w <width>, --width <width>
       Specify the display width which should be used for output from
       the search command (by default, the terminal width is used).

A página man de dpkg diz:

   COLUMNS
          Sets the number of columns dpkg should use when
          displaying formatted text. Currently only used by -l.
    
por 11.01.2014 / 11:49