为什么 grep 语句中冒号后面的空格字符在 Bash 中不起作用?



为什么下面的第一个 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标志,否则这将是多余的。

最新更新