Como marcar uma string GREP correspondente ao redirecionar a saída para o arquivo

3

Estou tentando usar o grep para encontrar todas as strings correspondentes no arquivo e enviá-las, no contexto da linha, para outro arquivo, adicionando alguns tipos de marcas (idealmente dois asteriscos) em cada lado da correspondência.

Por exemplo, tenho input.txt arquivo com o seguinte concurso:

Dog walks in the park
Man runs in the park
Man walks in the park
Dog runs in the park
Dog is still
They run in the park
Woman runs in the park

Então, eu pesquiso grep com redirecionamento para o arquivo:

grep -P ' runs? ' input.txt > output.txt

Cria output.txt com o seguinte concurso:

Man runs in the park
Dog runs in the park
They run in the park
Woman runs in the park

O que eu gostaria de fazer é obter essa saída:

Man **runs** in the park
Dog **runs** in the park
They **run** in the park
Woman **runs** in the park

Ou seja, para cada correspondência no contexto, adicione dois asteriscos em torno dessa correspondência.

Eu sei que posso obter apenas correspondências adicionando -o option:

grep -P ' runs? ' input.txt > output.txt

mas preciso vê-los no contexto.

Eu também sei que posso destacar essas correspondências na sessão interativa executando isso:

GREP_OPTIONS='--color=auto'

mas estou usando o grep dentro do script bash, então não tem utilidade para mim.

Então, eu estou querendo saber se existe alguma maneira de marcar essas correspondências no arquivo de saída, diretamente com o grep. Eu sei que eu poderia mais tarde canalizar a saída do grep para um comando diferente para conseguir isso, mas eu preferiria usar alguma opção do grep. É possível? Se não, qual é a maneira mais direta de alcançar o resultado desejado combinando o grep com outras ferramentas?

    
por Rafal 21.07.2015 / 14:20

1 resposta

5

Você deseja usar outras ferramentas para realizar substituições, como sed :

sed -n 's/ \(runs\?\) / **** /p' input.txt > output.txt

Ou Perl:

perl -ne 's/ (runs?) / **** /&&print' input.txt > output.txt
    
por kos 21.07.2015 / 14:31