鱼壳上的奇怪的grep行为

时间:2017-08-31 11:10:28

标签: regex shell grep fish

cat > abc.txt <<EOF
2014-04-11 00:00:00
2014-02-19 00:22:00
EOF

执行时

grep -E :[0-9]{2}: abc.txt

我得到了

2014-02-19 00:22:00

我在期待

2014-04-11 00:00:00
2014-02-19 00:22:00

这发生在鱼壳(2.4.0)上,在bash上工作正常。我对这里发生的事情非常感兴趣

1 个答案:

答案 0 :(得分:7)

在鱼{a,b,c}中是一名普查员。文档中的使用示例:

$ echo input.{c,h,txt}
input.c input.h input.txt

因此,您的正则表达式会扩展为:[0-9]2:

$ echo :[0-9]{2}:
:[0-9]2:
$ echo :[0-9]{2,3,4}:
:[0-9]2: :[0-9]3: :[0-9]4:

逃避花括号以避免这种情况:

$ echo :[0-9]\{2\}:
:[0-9]{2}:

或者,正如Fredrik建议的那样,引用整个正则表达式:

$ echo ':[0-9]{2}:'
:[0-9]{2}: