Чтобы использовать grepдве разные строки, найдите оба шаблона.
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Или используйте чередование
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Чтобы получить следующую строку после шаблона, вы можете использовать контекстную опцию
$ grep -A1 sweet file_type
This is a sweet
lemon.
Но если вы ищете явно для многострочного шаблона, что это сложно , потому что grepдумает , что в строках ... . Вы .*поймаете все между "сладким" и "лимонным" на линии . Мы можем получить «лимон» на следующей строке, -Pиспользуя, \nчтобы соответствовать новой строке и сообщая, grepчто файл отделен от нуля -z:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
Примечания:
-EИспользуйте расширенные регулярные выражения (чтобы использовать |символ для чередования без необходимости экранировать его)
-An Выведите дополнительные строки после шаблона, где n - количество задних строк для печати
-PИспользуйте регулярные выражения в стиле Perl ( вместо этого «в эксперименте» grep- установите pcregrepдля лучшей поддержки регулярных выражений Perl)
-zИспользуйте нулевой символ как разделитель (просто притворяясь в этом случае, но grepвозьмем наше слово для этого)
Хотя grep -zPкоманда будет работать в этом конкретном случае (файл, состоящий ровно из двух строк), в общем случае любой обычный файл, разделенный символом новой строки, будет рассматриваться как одна строка, поэтому либо выгрузите содержимое всего файла (если есть совпадение где-либо) или ничего; обычно это не то, что люди используют grepдля.
Марк ван Леувен
да, это полезно только с -o... отредактировано ...
Zanna
В случае, если это испробовано на других дистрибутивах, вы можете встретить: grep: The -P and -z options cannot be combined- например, grep (GNU grep) 2.5.1 на RHEL
извините, но это будет точно соответствовать "sweet | lemon"
αғsнιη
4
@KasiyA Эта строка работает нормально. grepпо умолчанию работает в «стандартном режиме», где «специальные символы» , как |, +, *интерпретируются буквально , если они не замаскированы с помощью обратной косой черты. Смотрите, например, этот ответ . Чтобы использовать то, к чему вы, вероятно, привыкли, что «специальные символы» должны быть замаскированы, чтобы интерпретироваться буквально, вам нужно переключиться в «расширенный режим» ( grep -E). Может быть, Маднеон мог бы более подробно рассказать о своих ответах, например, то, что попытка ОП сочла бы ?
grep -zP
команда будет работать в этом конкретном случае (файл, состоящий ровно из двух строк), в общем случае любой обычный файл, разделенный символом новой строки, будет рассматриваться как одна строка, поэтому либо выгрузите содержимое всего файла (если есть совпадение где-либо) или ничего; обычно это не то, что люди используютgrep
для.-o
... отредактировано ...grep: The -P and -z options cannot be combined
- например, grep (GNU grep) 2.5.1 на RHELКак это:
источник
grep
по умолчанию работает в «стандартном режиме», где «специальные символы» , как|
,+
,*
интерпретируются буквально , если они не замаскированы с помощью обратной косой черты. Смотрите, например, этот ответ . Чтобы использовать то, к чему вы, вероятно, привыкли, что «специальные символы» должны быть замаскированы, чтобы интерпретироваться буквально, вам нужно переключиться в «расширенный режим» (grep -E
). Может быть, Маднеон мог бы более подробно рассказать о своих ответах, например, то, что попытка ОП сочла бы ?