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


Ответы:


9

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

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

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

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

Экспериментально поддерживается в Grep : echo $string | grep -P '(?<!Mr )John Smith'.
организовать

@arrange Действительно. Спасибо, я обновлю ответ.
Jcollado

6

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

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

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

ОП не запрашивают, чтобы строка была единственной вещью в ее строке.
энзотиб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.