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