Se você não se importa em usar perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
As correspondências em cada linha são retornadas em um contexto de lista, que você pode unir com um delimitador vazio.
Eu tenho uma saída de um comando que eu quero canalizar para algum tipo de comando grep para obter a parte em cada linha que corresponda a um dado regex, e só saída a parte correspondente, sem introduzir novas linhas
Eu sei que grep -o
pode 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 linhas novas.
Exemplo:
entrada (saída do meu comando):
banana apple banana
apple bananas banned
regex :
ban[a-z]*
saída por grep -o
:
banana
banana
bananas
banned
saída esperada :
bananabanana
bananasbanned
Uma coisa que posso usar é usar tr
para substituir o caractere de nova linha por algum caractere que provavelmente não aparece na saída do comando, alimentar a saída para grep -o
e usar tr
para volte a nova linha.
mycommand|tr '\n' @|grep -o regex|tr -d '\n'|tr @ '\n'
No entanto, suponho que deva haver algumas soluções melhores. Qualquer ajuda seria apreciada.
Tags bash text-processing