dot*_*hen 0 regex linux bash grep
我找了所有组合foo和bar无论哪个顺序,这可能会在多行运行(在实践中,超过5行不再).这是一个测试文件:
$ cat test
foo
a
bar
b
1 foo 2 bar 3
1 foo2bar 3
bar
a
foo
b
1 bar 2 foo 3
1 bar2foo 3
Run Code Online (Sandbox Code Playgroud)
使用时,我无法将单个字符与换行符匹配pcregrep.我可以很好地匹配所有单个字符:
$ pcregrep --color -Mi '(foo.*bar)?(bar.*foo)?' test
test:1 foo 2 bar 3
test:1 foo2bar 3
test:1 bar 2 foo 3
test:1 bar2foo 3
$
Run Code Online (Sandbox Code Playgroud)
然而,可以看出多线foo/bar组合不匹配.因此,我尝试匹配所有字符\.和换行符,\n但这不会返回任何行:
$ pcregrep --color -Mi '(foo[.\n]*bar)?(bar[.\n]*foo)?' *
$
Run Code Online (Sandbox Code Playgroud)
事实上,我似乎无法.在一个[]组中与运算符匹配和单个字符:
$ pcregrep --color -Mi '(foo[.]*bar)?(bar[.]*foo)?' *
$ pcregrep --color -Mi '(foo[\.]*bar)?(bar[\.]*foo)?' *
$
Run Code Online (Sandbox Code Playgroud)
如何将.操作员置于一个[]组内?
点与新线不匹配,您可以使用单线修改器(?s),允许点匹配换行符(或用点替换点[\s\S])
pcregrep --color -Mi '(?s)(foo.*?bar)?(bar.*?foo)?' test
Run Code Online (Sandbox Code Playgroud)
要么
pcregrep --color -Mi '(?s)(?|foo(.*?)bar|bar(.*?)foo)' test
Run Code Online (Sandbox Code Playgroud)
或者干脆:
pcregrep --color -Mi '(?s)(foo.*?bar|bar.*?foo)' test
Run Code Online (Sandbox Code Playgroud)
如果在字符类中放置正则表达式特殊字符,则将其视为文字.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |