为什么下面的第一个 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
grep
保证实现BRE -- POSIX基本正则表达式。s
在 BRE 中没有意义。(一些操作系统供应商扩展了标准,有些则没有(。
改用[[:space:]]
来拥有无处不在的东西。
将$
添加到表达式的末尾会使表达式失败,因为它与行尾匹配。您的行在匹配部分之后有一个额外的, 10.0.0.0/255.0.0.0
,所以当然不匹配$
.你可以说.*$
,但除非你启用了-o/--only-matching
标志,否则这将是多余的。