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
.
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?
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?