Если вы используете BSD grep
(не поддерживает perl regex param -P
), вот обходной путь:
grep -o "aaa.*cdn" <(paste -sd_ file) | tr '_' '\n'
Это работает путем конкатенации всех строк (заменяя новые строки символом _
), проверки однострочного шаблона и расширения строк до исходного состояния.
Если вы используете GNU grep
, вы можете добиться многострочного совпадения в grep
, но вам нужно использовать perl-regexp для grep
(-P
), как упоминалось в другом ответе. Вы все еще можете установить GNU grep
на macOS через brew install grep
и использовать ggrep
вместо него.
Также вы можете использовать pcregrep
который поддерживает многострочные шаблоны (-M
).
Вы также можете использовать команду ex
, например:
ex +"/aaa/;/cdn/p" -scq! file