grep dla ciągu nie poprzedzonego innym ciągiem


10

Czy za pomocą grep można wyszukiwać wystąpienia, John Smithale je wykluczać Mr John Smith?

Odpowiedzi:


9

Można to rozwiązać za pomocą wyrażenia regularnego z negatywnym wyglądem (który jest eksperymentalnie obsługiwany, grepjak wskazano w komentarzu z arrange):

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

Ponieważ obsługa jest tylko eksperymentalna, możesz perlzamiast tego użyć :

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

Jest obsługiwany eksperymentalnie w grep : echo $string | grep -P '(?<!Mr )John Smith'.
umówić

@ararate Rzeczywiście. Dzięki, zaktualizuję odpowiedź.
jcollado,

6

Możesz wykonać

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

1
Fajny pomysł, ale nie zadziała, jeśli linia maJohn Smith Mr John Smith John Smith
Ron

1

Aby użyć wyrażeń regularnych, użyj ^ i $

grep "^John Smith$"

^ jest zgodne od początku $ jest zgodne od końca.

Składnia będzie się różnić w zależności od tego, czego szukasz w jakim pliku.

Możesz używać wyrażeń regularnych z sed, grep, awk ....

Przykład

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

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

OP nie prosi, aby ciąg znaków był jedyną rzeczą w jego linii.
enzotib,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.