nul*_*ion 78
尝试pcregrep而不是常规grep:
pcregrep -M "pattern1.*\n.*pattern2" filename
Run Code Online (Sandbox Code Playgroud)
该-M选项允许它跨多行匹配,因此您可以搜索换行符\n.
ara*_*rdi 72
grep 模式与各个行匹配,因此模式无法匹配输入中找到的换行符.
但是你可以找到这样的空行:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
Run Code Online (Sandbox Code Playgroud)
小智 18
你可以用这种方式......
grep -P '^\s$' file
Run Code Online (Sandbox Code Playgroud)
-P用于Perl正则表达式(POSIX的扩展grep).\s匹配空白字符; 如果跟着*,它也匹配一个空行.^匹配行的开头.$匹配行的结尾. rub*_*ion 15
由于@jarno我知道-z选项,我发现使用GNU的grep时-P选项,对匹配\n是可能的.:)
例:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
打印 bar
至于变通方法(不使用非便携式-P),您可以临时替换不同的新行字符并将其更改回来,例如:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
Run Code Online (Sandbox Code Playgroud)
基本上,它在寻找精确匹配_foo_,其中_手段\n(所以__= \n\n).您无需将其翻译回来tr '_' '\n',因为无论如何每个模式都会打印在新行中,因此删除_就足够了.
| 归档时间: |
|
| 查看次数: |
142778 次 |
| 最近记录: |