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


10

Est-il possible, en utilisant grep, de rechercher des instances de John Smithmais d'exclure des instances de Mr John Smith?

Réponses:


9

Cela pourrait être résolu en utilisant une expression régulière avec un lookbehind négatif (qui est supporté expérimentalement grepcomme le souligne le commentaire d'arranger):

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

Puisque le support est juste expérimental, vous voudrez peut-être utiliser à la perlplace:

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

Il est soutenu expérimentalement grep : echo $string | grep -P '(?<!Mr )John Smith'.
organiser

@arrange Effectivement. Merci, je mettrai à jour la réponse.
jcollado

6

Vous pouvez exécuter

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

1
Belle idée, mais ne fonctionnera pas si la ligne aJohn Smith Mr John Smith John Smith
Ron

1

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

grep "^John Smith$"

^ correspond au début $ correspond à la fin.

La syntaxe variera 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

L'OP ne demande pas que la chaîne soit la seule chose sur sa ligne.
enzotib
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.