grep para string não precedida por outra string


10

É possível, usando grep, procurar instâncias de John Smithmas excluir instâncias de Mr John Smith?

Respostas:


9

Isso pode ser resolvido usando uma expressão regular com lookbehind negativo (que é experimentalmente suportado grepconforme apontado pelo comentário do organize):

$ grep -P '(?<!Mr )John Smith' file

Como o suporte é apenas experimental, convém usar perl:

$ perl -nle 'print if /(?<!Mr )John Smith/' file

É experimentalmente suportado no grep : echo $string | grep -P '(?<!Mr )John Smith'.
organize

@arrange De fato. Obrigado, vou atualizar a resposta.
11118 jcollado

6

Você pode executar

command | grep 'John Smith' | grep -v 'Mr John Smith'

1
Boa idéia, mas não vai funcionar se a linha temJohn Smith Mr John Smith John Smith
Ron

1

Para usar expressões regulares, use ^ e $

grep "^John Smith$"

^ é correspondência do começo $ é correspondência do fim.

A sintaxe varia de acordo com o que você está procurando e em qual arquivo.

Você pode usar expressões regulares com sed, grep, awk ....

Exemplo

bodhi@Ubuntu:~ cat file
Mr John Smith
John Smith
John
Smith

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith

O OP não pede que a string seja a única coisa em sua linha.
enzotib 13/12/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.