Alterar o tamanho da guia do comando “cat”

14

Quando estou em vim , posso alterar o tamanho da tabulação com o seguinte comando:

:set ts=4

É possível definir também o tamanho da tabulação para a saída do comando cat ?

    
por Meysam 27.02.2012 / 15:28

6 respostas

20

O primeiro comando aqui emula a formatação que você vê em vim . Ele inteligentemente expande as guias para o número equivalente de espaços, com base em uma configuração tab-STOP (ts) de cada 4 colunas.

printf "ab\tcd\tde\n" |expand -t4   

Saída

ab  cd  de

Para manter as abas como abas e ter a aba STOP posições definidas para cada 4ª coluna, então você deve mudar a maneira como o ambiente funciona com um tab-char (assim como o vim faz com o comando :set ts=4 )

Por exemplo, no terminal, você pode definir a guia STOP como 4 com este comando;

tabs 4; printf "ab\tcd\tde\n" 

Saída

ab  cd  de
    
por 27.02.2012 / 16:31
7

Não há noção de guias ou tabulações em cat ; o programa apenas canaliza as entradas para a saída e trata as guias como qualquer outro caractere. Se o dispositivo de saída for um terminal, as guias serão tratadas de acordo com o comportamento que o terminal está configurado para fornecer.

Os sistemas que implementam POSIX.1 têm um comando chamado tabs(1) que ajustará o conceito do terminal de como as guias devem ser exibidas. Dependendo de um layout de guia específico, isso não é considerado uma boa ideia, já que alguém pode enviar seu arquivo para outro dispositivo, como uma impressora que não faz o que você pretendia.

Quando você ajusta ts em vim (ou% normalvi), tudo o que você está fazendo é ajustar como o editor interpreta os caracteres da guia quando exibido. Não tem relação com o que acaba no arquivo.

    
por 27.02.2012 / 20:29
7

Use o seguinte código:

tabs -n

Em que n é o número de espaços para os quais você deseja que as guias também correspondam. Para não ter que fazer isso toda vez que você iniciar o shell, basta editar seu .bash_profile em ~/ e adicionar a linha acima ao final do arquivo.

Para mais informações sobre o comando tabs, consulte:

man tabs
    
por 31.01.2014 / 11:19
3

Com base nas respostas e exemplos acima, parece que o comando real que o OP queria é ...

cat somefile | expand -t4

Isso funciona para mim no Red Hat 6.4.

    
por 21.08.2013 / 15:11
0

Para expandir as respostas já fornecidas, expand também pode obter uma lista de posições de parada de tabulação. Isso é útil se o tamanho do conteúdo das colunas varia muito.

Eu recebi este requisito hoje quando queria tornar a saída de openssl ciphers mais legível:

$ openssl ciphers -v 'HIGH'|tr -s ' ' '\t'|expand -t31,41,57,70,90
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2   Kx=ECDH         Au=RSA       Enc=AESGCM(256)     Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2   Kx=ECDH         Au=ECDSA     Enc=AESGCM(256)     Mac=AEAD
ECDHE-RSA-AES256-SHA384        TLSv1.2   Kx=ECDH         Au=RSA       Enc=AES(256)        Mac=SHA384
ECDHE-ECDSA-AES256-SHA384      TLSv1.2   Kx=ECDH         Au=ECDSA     Enc=AES(256)        Mac=SHA384
...
ECDH-ECDSA-AES128-SHA          SSLv3     Kx=ECDH/ECDSA   Au=ECDH      Enc=AES(128)        Mac=SHA1
AES128-GCM-SHA256              TLSv1.2   Kx=RSA          Au=RSA       Enc=AESGCM(128)     Mac=AEAD
AES128-SHA256                  TLSv1.2   Kx=RSA          Au=RSA       Enc=AES(128)        Mac=SHA256
AES128-SHA                     SSLv3     Kx=RSA          Au=RSA       Enc=AES(128)        Mac=SHA1

CAMELLIA128-SHA                SSLv3     Kx=RSA          Au=RSA       Enc=Camellia(128)   Mac=SHA1
PSK-AES128-CBC-SHA             SSLv3     Kx=PSK          Au=PSK       Enc=AES(128)        Mac=SHA1

Usar apenas expand -t31 aumentaria a largura da saída de cerca de 100 caracteres para mais de 160 caracteres.

    
por 10.02.2016 / 16:52
-2

De acordo com a manpage, o gato não pode fazer isso sozinho. Mas você pode, por exemplo execute a saída de cat através de tr filter para substituir as guias por qualquer número de espaços que você desejar:

cat somefile | tr '\t' '  '

substituirá o caractere de tabulação por dois espaços.

Atualização: conforme apontado nos comentários deste post, isso realmente não funciona. No entanto, estou mantendo a resposta como um exemplo de como não é necessário.

    
por 27.02.2012 / 15:43