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.