Por que o grep imprime saída inesperada quando o arquivo contém retornos de carro? [duplicado]

0

Quando eu executo o grep assim, posso ver as correspondências como esperado:

$> echo -ne 'foo\nfoo\n' > file_a
$> grep -Hn foo file_a
file_a:1:foo
file_a:2:foo

Mas quando eu crio um arquivo com retornos de carro nele, o grep me dá uma saída inesperada:

$> echo -ne '\x0dfoo\x0dfoo\nfoo\n' > file_b
$> grep -Hn foo file_b
fooe_b:1:
file_b:2:foo

Alguém pode explicar por que isso gera essa saída?

    
por plafratt 15.03.2018 / 16:39

1 resposta

1

Não é inesperado. O retorno do carro move o cursor para o início da linha. grep já imprimiu o nome do arquivo e o número da linha, e o conteúdo da linha correspondente substitui isso (devido ao retorno do carro antes e depois do primeiro foo na linha).

As devoluções de carro também podem ser gravadas como \r :

printf '\rfoo\rfoo\nfoo\n' >file

Isso criará um arquivo com duas linhas. A primeira linha conterá a palavra foo duas vezes, mas o retorno de carro moverá o cursor para o início da linha. Se estiver usando cat para visualizar este arquivo, parecerá que há apenas um foo na primeira linha.

    
por 15.03.2018 / 16:57

Tags