为什么 grep 在使用 -zoP 和匹配的反向引用后跟换行符调用时会延迟匹配?



我有一个文件cases

foo
bar
cases:
1: foo
2: bar
baz
cases:
3: baz
quux

由于缩进总是在案例之后再次返回,我想列出带有grep -zoP '(s*)cases:n(1.*n)*' cases的情况,但这会输出

cases:
cases:

而如果我使用grep -zoP '(s*)cases:n(1.*n){1,}' cases,我会得到我想要的输出:

cases:
1: foo
2: bar
cases:
3: baz

我尝试过的任何类似正则表达式都没有出现此行为:

$ grep -o '(foo)bar(1)*'<<<$'foobarfoofoofoofoo'
foobarfoofoofoofoo
$ grep -o '(foo)bar(1)*'<<<$'foobarfoofoofoofoobax'
foobarfoofoofoofoo
$ grep -oP '(foo)bar(1)*'<<<$'foobarfoofoofoofoobax'
foobarfoofoofoofoo
$ grep -zoP '(foo)bar(1)*'<<<$'foobarfoofoofoofoobax'
foobarfoofoofoofoo
$ grep -zoP '(foo)n*bar'<<<$'foonnnnn'
foo



$

为什么 grep 更喜欢匹配我的正则表达式 0 次?

我认为这是一个错误,但有人指出s,它是 POSIX 字符类的同义词[:space:]对应于 C 语言环境中的[ tnrfv],因此也与前面的换行符匹配此处

相关内容

  • 没有找到相关文章

最新更新