grep для рядка, якому не передує інший рядок


10

Чи можливо за допомогою grep шукати екземпляри, John Smithале виключати екземпляри Mr John Smith?

Відповіді:


9

Це можна вирішити, використовуючи регулярний вираз із негативним поглядом (який експериментально підтримується, grepяк вказує коментар від розташування):

$ 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

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