如何为grep中的新行提供模式? 新行开始,新行结束。不是正则表达方式。像\ n。
之类的东西答案 0 :(得分:74)
尝试pcregrep
而非常规grep
:
pcregrep -M "pattern1.*\n.*pattern2" filename
-M
选项允许它跨多行匹配,因此您可以搜索换行符\n
。
答案 1 :(得分:67)
grep
模式与各行匹配,因此模式无法匹配输入中找到的换行符。
但是你可以找到这样的空行:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
答案 2 :(得分:18)
你可以这样使用......
grep -P '^\s$' file
-P
用于Perl正则表达式(POSIX grep
的扩展名)。\s
匹配空白字符;如果后跟*
,则它也匹配一个空行。^
匹配该行的开头。 $
匹配该行的结尾。 答案 3 :(得分:8)
感谢@jarno我知道-z选项,我发现当使用带-P选项的GNU grep时,匹配\n
是可能的。 :)
示例:强>
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
打印bar
答案 4 :(得分:6)
至于解决方法(不使用非便携式-P
),您可以临时用不同的字符替换换行符并将其更改回来,例如:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
基本上它正在寻找完全匹配_foo_
,其中_
表示\n
(所以__
= \n\n
)。您无需按tr '_' '\n'
将其翻译回来,因为无论如何每个模式都会打印在新行中,因此删除_
就足够了。
答案 5 :(得分:1)