Как дать шаблон для новой строки в grep?
Как дать шаблон для новой строки в grep? Новая строка в начале, новая строка в конце. Не регулярное выражение путь. Что-то вроде n.
5 ответов:
grep
шаблоны сопоставляются с отдельными линиями, поэтому шаблон не может соответствовать новой строке, найденной во входных данных.однако вы можете найти пустые строки, как это:
grep '^$' file grep '^[[:space:]]*$' file # include white spaces
попробовать
pcregrep
вместоgrep
:pcregrep -M "pattern1.*\n.*pattern2" filename
the
-M
опция позволяет ему соответствовать по нескольким строкам, так что вы можете искать новые строки, как\n
.
вы можете использовать этот способ...
grep -P '^\s$' file
-P
используется для регулярных выражений Perl (расширение POSIXgrep
).\s
соответствует пробелам; если за ними следует*
, Он также соответствует пустой строке.^
соответствует началу строки.$
соответствует концу строки.
как временное решение (без использования непереносимую
-P
), вы можете временно заменить символ новой строки в другую и изменить его обратно, например:grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
в основном он ищет точное совпадение
_foo_
здесь_
означает\n
(т.__
=\n\n
). Вам не нужно переводить его обратно наtr '_' '\n'
, так как каждый шаблон будет напечатан в новой строке в любом случае, поэтому удаление_
достаточно.