Mantenha a saída do grep em uma linha?

4

Eu tenho uma pergunta bem rápida para vocês. Depois de examinar a documentação e o site aqui, fiquei me perguntando se era possível evitar que o grep exibisse cada correspondência na mesma linha.

No meu exemplo, eu preciso pegar uma string no formato \xeb\x1a\x5e\x31\xc0\x88\x46\x07... etc. Eu uso grep -oP "x\K(\S\S)") para obter cada um dos dígitos hexadecimais.

A saída está correta, no entanto, cada correspondência está em sua própria linha. Isso é um problema porque eu preciso alimentar essa saída em outro programa. Então, novamente, existe alguma maneira de colocar cada partida consecutivamente sem nenhum tipo de preenchimento?

    
por btf1998 03.12.2015 / 04:20

2 respostas

3

Você pode enviar a saída para tr , por exemplo,

grep -oP "x\K(\S\S)") | tr -d '\n'

Isso custa um processo adicional, ou seja, torna o seu programa mais lento. Se isso for um problema, você pode usar sed ou awk .

    
por 03.12.2015 / 04:43
0

Funciona se você alimentá-lo com sed para remover todos os caracteres de nova linha ( \n )?

echo \xeb\x1a\x5e\x31\xc0\x88\x46\x07 | grep -oP "x\K(\S\S)" | sed ':a;N;$!ba;s/\n//g'

Referência: > Como posso substituir uma nova linha (\ n) usando sed?

    
por 03.12.2015 / 04:43

Tags