我有一个文本文件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。
答案 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]*$
例如:
egrep '^[1-9]*0[1-9]*0[1-9]*0[1-9]*0?[1-9]*0?[1-9]*$' test.txt