Eu tenho uma saída de um comando que desejo canalizar para algum tipo de comando grep para obter a parte em cada linha que corresponde a um determinado regex e apenas produzir a parte correspondente, sem introduzir novas linhas
Sei que grep -o
posso fazer algo bastante semelhante, mas gera uma nova linha para cada correspondência, e a saída do meu comando também contém muitas novas linhas.
Exemplo:
input (saída do meu comando):
banana apple banana
apple bananas banned
expressão regular :
ban[a-z]*
saída porgrep -o
:
banana
banana
bananas
banned
saída esperada :
bananabanana
bananasbanned
Uma coisa que posso sugerir é usar tr
para substituir o caractere de nova linha por algum caractere que provavelmente não aparecerá na saída do comando, alimentar a saída para grep -o
e, em seguida, usar tr
para recuperar a nova linha.
mycommand|tr '\n' @|grep -o regex|tr -d '\n'|tr @ '\n'
No entanto, suponho que deve haver algumas soluções melhores. Qualquer ajuda seria apreciada.
Se você não se importa de usar
perl
:As correspondências em cada linha são retornadas em um contexto de lista, que você pode juntar com um delimitador vazio.