我有一个文件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'<<<$'foo\n\n\n\n\n'
foo
$
为什么grep希望匹配我的正则表达式0次?
答案 0 :(得分:0)
我认为这是一个错误,但是我指出\s
是POSIX字符类[:space:]
的同义词,在C语言环境中对应于[ \t\n\r\f\v]
,因此匹配前面的换行符。