O que significa 'pr -e'?

0

Do manual do coreutils sobre pr :

‘-e[in-tabchar[in-tabwidth]]’
‘--expand-tabs[=in-tabchar[in-tabwidth]]’

Expand tabs to spaces on input. Optional argument in-tabchar is the input tab character (default is the TAB character). Second optional argument in- tabwidth is the input tab character’s width (default is 8).

Será que -e[in-tabchar[in-tabwidth]] significa substituir cada in-tabchar por in-tabwidth de espaços em branco?

Nos dois exemplos a seguir, por que a , b e c são separados por um espaço em branco, enquanto 1 e 3 por três espaços em branco no primeiro exemplo e dois espaços em branco no segundo exemplo ? Obrigado.

$ printf "a:b:c\n1::3\n" | pr -t -e:2
a b c
1   3

$ printf "a:b:c\n1::3\n" | pr -t -e:1
a b c
1  3
    
por Tim 30.07.2018 / 14:56

1 resposta

3

pr -e faz o mesmo trabalho que o comando expand . Ele expande as guias de maneira semelhante ao que normalmente aconteceria com o emulador de terminal. TAB é um caractere de controle que os terminais entendem como mover o cursor para a próxima parada de tabulação, ele é destinado a formatação e alinhamento tabular.

Na maioria dos terminais, as paradas de tabulação são, por padrão, a cada 8 colunas. Então, enviar a eles um TAB terá o mesmo efeito que o envio de um número de espaços que variam de 1 a 8, dependendo da posição atual do cursor:

 $ printf '%b\n' 'a\tb' 'abcde\tg'
 a       b
 abcde   g

A primeira guia moveu as 7 colunas do cursor para a direita e as 3 colunas para a direita.

pr -e iria substituir os \t por tantos espaços quantos fossem necessários para ter o mesmo efeito:

$ printf 'abcde\tg\n' | sed l
abcde\tg$
abcde   g
$ printf 'abcde\tg\n' | pr -te | sed l
abcde   g$
abcde   g

Note que o GNU pr sofre da mesma limitação que o GNU expand , pois assume que todos os caracteres são feitos de um byte e toma uma coluna para exibir.

    
por 30.07.2018 / 15:10