正向超前后,grep -oPz(GNU grep 3.1)与\ n不匹配

时间:2018-10-05 02:23:02

标签: regex bash perl grep gnu

作为一个简化的示例,我有printf "abc\ndef\nghi\n" | grep -oPz '\w{2}(?=c|f|i)\n',但不匹配任何内容,但是grep -oPz '\w{2}(?=(c|f|i)\n)'匹配。这是为什么?我需要在输出中换行。

所需的输出将匹配行并输出它们,而无需超前部分。 ab\n

1 个答案:

答案 0 :(得分:2)

ab的意思是a,后跟b,并在b之后继续匹配。

a(?=b)的意思是a,后跟b,并在a之后继续匹配。

因此,要使(?=c|f|i)\n匹配,必须有一个与c\nf\n或两者都匹配的位置i\n。那是不可能的。