Как задать шаблон для новой строки в 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', так как каждый шаблон будет напечатан в новой строке, так что удаления _ достаточно.