如何在 grep 中为新行提供模式?开头换行,结尾换行。不是正则表达式的方式。像\n这样的东西。
问问题
201912 次
6 回答
102
尝试pcregrep
代替常规grep
:
pcregrep -M "pattern1.*\n.*pattern2" filename
该-M
选项允许它匹配多行,因此您可以搜索换行符为\n
.
于 2012-10-01T17:46:57.000 回答
95
grep
模式与单个行匹配,因此模式无法匹配输入中找到的换行符。
但是你可以找到像这样的空行:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
于 2012-09-29T12:23:53.050 回答
28
感谢@jarno,我知道 -z 选项,并且我发现当使用带有 -P 选项的 GNU grep 时,匹配\n
是可能的。:)
例子:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
印刷bar
于 2018-03-09T11:10:50.590 回答
24
你可以用这种方式...
grep -P '^\s$' file
-P
用于 Perl 正则表达式(对 POSIX 的扩展grep
)。\s
匹配空白字符;如果后跟*
,它也匹配一个空行。^
匹配行的开头。$
匹配行尾。
于 2012-09-29T12:30:32.097 回答
6
至于解决方法(不使用 non-portable -P
),您可以临时用不同的换行符替换换行符并将其改回,例如:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
基本上它正在寻找完全匹配的_foo_
意思_
(\n
so __
= \n\n
)。您不必将其翻译回来tr '_' '\n'
,因为无论如何每个模式都会打印在新行中,因此删除_
就足够了。
于 2015-10-18T12:04:28.923 回答
4
于 2018-12-29T10:21:21.850 回答