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

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

10
задан 12 December 2011 в 21:20

3 ответа

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

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

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

$ perl -nle 'print if /(?<!Mr )John Smith/' file
0
ответ дан 12 December 2011 в 21:20

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

command | grep 'John Smith' | grep -v 'Mr John Smith'
0
ответ дан 12 December 2011 в 21:20

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

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
0
ответ дан 12 December 2011 в 21:20

Другие вопросы по тегам:

Похожие вопросы: