Não interprete o retorno de carro ('\ 0D') no meu terminal

1

Costumo precisar de grep para uma determinada expressão em um arquivo de texto grande. Por algum motivo, o fornecedor privado decide usar CR (retorno de carro, CRD ) para separar o argumento em uma linha específica do arquivo de texto.

No entanto, o caractere grep é interpretado pelo terminal, tornando meu comando cat ou xterm-256color praticamente inútil.

Então, como alguém poderia exibir o conteúdo no seguinte arquivo em um terminal (por exemplo, %code% ).

$ hexdump /tmp/bla 
0000000 3031 3030 3020 0d20 3335 310d 3132 3830
0000010 300d 302e 3031 3030 0d30 0a33          
000001c

Até agora eu tentei sem muita sorte:

$ TERM=dumb cat /tmp/bla 
3.010000
    
por malat 23.10.2015 / 14:55

2 respostas

3

O GNU cat tem algumas opções para ajudar na impressão de arquivos contendo esses caracteres especiais:

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD and TAB

Então cat -v /tmp/bla deve fazer isso no seu caso. Ou talvez até -et , que também imprime guias e extremidades de linha de uma maneira especial.

    
por 23.10.2015 / 15:08
1

Ainda mais útil pode ser reconhecer que os dados eram hexadecimais e que 0xd é o retorno de carro ( \r ou ^M ). Existem algumas maneiras de trabalhar com isso:

  • a pergunta diz uma determinada linha , e olhando para o despejo, isso poderia ter sido de script , onde alguém estava fazendo alterações de edição no arquivo. Nesse caso, pode-se querer obter o resultado final das alterações de edição - tudo em uma linha. Você pode usar col para isso, por exemplo,

    col /tmp/bla

    embora col não seja tão poderoso quanto se deseja. (Eu uso um script baseado no filtro man-page do vi-como-emacs para obter resultados bons - mas fiz um script simples na minha resposta a Posso programaticamente" gravar "códigos de controle ANSI em um arquivo usando utilitários unix? que você pode achar mais útil que col ).

  • novamente, OP queria tratá-lo como várias linhas. Para isso, é possível fazer isso (traduzir o carro retorna para novas linhas):

    tr '\r' '\n' </tmp/bla

A propósito, o retorno de carro não é uma seqüência de escape (embora, como qualquer qualquer personagem, pode-se optar por representá-lo no formato "escapado" estilo C).

    
por 23.10.2015 / 23:14