作为一个简化的示例,我有printf "abc\ndef\nghi\n" | grep -oPz '\w{2}(?=c|f|i)\n'
,但不匹配任何内容,但是grep -oPz '\w{2}(?=(c|f|i)\n)'
匹配。这是为什么?我需要在输出中换行。
所需的输出将匹配行并输出它们,而无需超前部分。 ab\n
答案 0 :(得分:2)
ab
的意思是a
,后跟b
,并在b
之后继续匹配。
a(?=b)
的意思是a
,后跟b
,并在a
之后继续匹配。
因此,要使(?=c|f|i)\n
匹配,必须有一个与c
和\n
,f
和\n
或两者都匹配的位置i
和\n
。那是不可能的。