正则表达式可以正常工作,但不适用于Windows上bash中的egrep

时间:2019-05-17 14:42:54

标签: regex windows bash grep

我有一个文本文件test.txt,内容如下:

20001
200134
20103040
203004038002

我想使用以下egrep命令显示匹配项:

egrep '^(?!(?:.*?0){6,})(?=(?:.*?0){3,})[0-9]+$' test.txt

但是,由于某些原因,egrep不会输出任何内容。但是我可以看到我的正则表达式确实可以在regex101链接上运行: https://regex101.com/r/XZDonL/1

我使用egrep出错吗?因为我不知道我在做什么错。顺便说一下,我在Windows上使用bash。

1 个答案:

答案 0 :(得分:1)

(?!不支持环视符号egrep,但如果支持使其与Perl兼容,则可以尝试grep -P

似乎您要匹配包含0到3-5的数字。

与此匹配的另一种选择是将数字[1-9]与0+匹配,将3匹配为零,将2匹配为可选的零。

您可以将这种模式与egrep一起使用:

^[1-9]*0[1-9]*0[1-9]*0[1-9]*0?[1-9]*0?[1-9]*$

regex demo

例如:

egrep '^[1-9]*0[1-9]*0[1-9]*0[1-9]*0?[1-9]*0?[1-9]*$' test.txt