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?

Sam Hastings
fonte

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
jcollado
fonte
É 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'
enzotib
fonte
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
Pantera
fonte
O OP não pede que a string seja a única coisa em sua linha.
enzotib 13/12/11