为什么下面的第一个grep语句无法返回结果,但是下面的修改后的grep语句有效呢?我也尝试过egrep,结果也一样。
cat test
ALL: 192.168.0.0/255.255.0.0, 10.0.0.0/255.0.0.0
grep '^[\s]*ALL[\s]*:[\s]*192.168.0.0/255.255.0.0[\s]*' test
No results
grep '^[\s]*ALL[\s]*: 192.168.0.0/255.255.0.0[\s]*' test
ALL: 192.168.0.0/255.255.0.0, 10.0.0.0/255.0.0.0
另外,当我在末尾加一个$时,两个都失败了。
grep '^[\s]*ALL[\s]*:[\s]*192.168.0.0/255.255.0.0[\s]*$' test
No results
grep '^[\s]*ALL[\s]*: 192.168.0.0/255.255.0.0[\s]*$' test
No results
答案 0 :(得分:2)
grep
实现BRE-POSIX基本正则表达式。 \s
在BRE中没有意义。 (某些OS供应商扩展了标准,有些则没有。)
使用[[:space:]]
来代替某些东西。
在表达式的末尾添加$
会使它失败,因为它与行的末尾匹配。您的行在匹配部分之后有一个额外的, 10.0.0.0/255.0.0.0
,因此当然与$
不匹配。您可以说.*$
,但这将是多余的,除非您启用了-o/--only-matching
标志。