grep для строки, которой не предшествует другая строка

10

Можно ли с помощью grep искать экземпляры, John Smithно исключать их Mr John Smith?

Сэм Гастингс
источник

Ответы:

9

Эту проблему можно решить с помощью регулярного выражения с отрицательным внешним видом (что подтверждается экспериментально, grepкак указано в комментарии отrange):

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

Поскольку поддержка только экспериментальная, вы можете использовать perlвместо нее:

$ perl -nle 'print if /(?<!Mr )John Smith/' file
jcollado
источник
Экспериментально поддерживается в Grep : echo $string | grep -P '(?<!Mr )John Smith'.
организовать
@arrange Действительно. Спасибо, я обновлю ответ.
Jcollado
6

Вы можете выполнить

command | grep 'John Smith' | grep -v 'Mr John Smith'
enzotib
источник
1
Хорошая идея, но не будет работать, если линия имеетJohn Smith Mr John Smith John Smith
Рон
1

Чтобы использовать регулярные выражения, используйте ^ и $

grep "^John Smith$"

^ совпадение с начала $ совпадение с конца.

Синтаксис зависит от того, что вы ищете в каком файле.

Вы можете использовать регулярные выражения с sed, grep, awk ....

пример

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

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith
пантера
источник
ОП не запрашивают, чтобы строка была единственной вещью в ее строке.
энзотиб