Como usar o grep para obter apenas a parte correspondente, sem introduzir novas linhas extras

0

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.

    
por Weijun Zhou 07.12.2017 / 03:24

1 resposta

2

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.

    
por 07.12.2017 / 04:39