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

Я никогда не видел, чтобы система Linux исчерпала память просто потому, что она не перезагружалась достаточно часто. Если вы оставите пропущенную mamory программу, которая будет работать в течение длительного времени, она может съесть всю вашу память, но убийство этой программы вернет вас к чувствительной системе. Нет причин, по которым вам нужно перезагружаться во время обычного хода событий, кроме обновлений ядра.

8
задан 12 December 2011 в 23:20

3 ответа

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

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

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

$ perl -nle 'print if /(?<!Mr )John Smith/' file
8
ответ дан 25 May 2018 в 16:00
  • 1
    Он экспериментально поддерживается в grep : echo $string | grep -P '(?<!Mr )John Smith'. – arrange 13 December 2011 в 01:00
  • 2
    @arrange Действительно. Спасибо, я уточню ответ. – jcollado 13 December 2011 в 02:10
  • 3
    Совершенно - только то, что я был после. Благодаря! – Sam Hastings 13 December 2011 в 15:09

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

command | grep 'John Smith' | grep -v 'Mr John Smith'
4
ответ дан 25 May 2018 в 16:00
  • 1
    Хорошая идея, но не будет работать, если в строке есть John Smith Mr John Smith John Smith – Ron 22 August 2015 в 11:18

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

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
1
ответ дан 25 May 2018 в 16:00
  • 1
    ОП не запрашивает, чтобы строка была единственной вещью на своей линии. – enzotib 13 December 2011 в 14:08

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

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