如何在 grep 中给出新行的模式? 新行在开始,新行在结束。不是正则表达式的方式。有点像 n。
grep模式与单个行匹配,因此模式无法与输入中的换行匹配。
grep
但是你可以找到这样的空行:
grep '^$' file grep '^[[:space:]]*$' file # include white spaces
你可以用这种方式..。
grep -P '^\s$' file
-P
\s
*
^
$
试试 pcregrep而不是常规的 grep:
pcregrep
pcregrep -M "pattern1.*\n.*pattern2" filename
-M选项允许它跨多行进行匹配,因此您可以将换行作为 \n进行搜索。
-M
\n
至于变通方法(不使用不可移植的 -P) ,您可以用不同的字符临时替换一个新行字符并将其更改回来,例如:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
基本上它在寻找完全匹配的 _foo_,其中 _意味着 \n(所以 __ = \n\n)。你不必把它翻译回来的 tr '_' '\n',因为每个模式将打印在新的一行无论如何,所以删除 _就足够了。
_foo_
_
__
\n\n
tr '_' '\n'
Thanks to @jarno I know about the -z option and I found out that when using GNU grep with the -P option, 与 \n匹配是可能的. :)
例如:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
Result:
bar
包括匹配所有内容(包括换行符)的示例:
.*不匹配换行。要匹配包括换行在内的所有内容,使用 1 (.|\n)*:
.*
(.|\n)*
grep -zoP 'foo\n\K(.|\n)*'<<<$'foo\nbar\nqux'
bar qux
点击此处查看: http://stackoverflow/a/33418344 https://stackoverflow.com/a/33418344
刚找到
grep $'\r'
它在 Bash 中使用 $'\r'进行 c 式转义。
$'\r'
in 这篇文章