web-dev-qa-db-fra.com

grep pour chaîne non précédée d'une autre chaîne

Est-il possible, à l'aide de grep, de rechercher des instances de John Smith mais d'exclure des instances de Mr John Smith?

8
Sam Hastings

Cela pourrait être résolu en utilisant une expression régulière avec lookbehind négatif (qui est supporté expérimentalement dans grep comme le souligne le commentaire de arrange):

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

Comme le support n’est qu’expérimental, vous pouvez utiliser plutôt Perl:

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

Vous pouvez exécuter

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

Pour utiliser des expressions régulières, utilisez ^ et $

grep "^John Smith$"

^ est la correspondance du début $ est la correspondance de la fin.

La syntaxe varie en fonction de ce que vous recherchez dans quel fichier.

Vous pouvez utiliser des expressions régulières avec sed, grep, awk ....

Exemple

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

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