在grep中使用正则表达式元字符

时间:2016-07-24 17:11:43

标签: ubuntu grep

根据系统:cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"

在Mac上,这看起来非常不错并且有效:

printf "12\na\na12\ndaab\n"|grep "\d" 

我明白了:

12
na12

在上述系统中,相同的命令不返回任何内容。

虽然处理正则表达式:printf "12\na\na12\ndaab\n"|grep "^.$" 给出:

a

任何解释和解决方案?

修改

  • grep(GNU grep)2.16
  • “\ w”就像一个魅力

2 个答案:

答案 0 :(得分:1)

要使\d起作用,您需要使用Perl样式的正则表达式。

printf "12\na\na12\ndaab\n" | grep -P '\d'

给出

12
a12

另一种选择是

printf "12\na\na12\ndaab\n" | grep -E '[[:digit:]]+'

给出了

12
a12

警告:正如grep manpage所说,Perl风格正则表达式是高度实验性的

答案 1 :(得分:1)

很少有工具能够将\d视为一个数字,而且只有几个字符比明显且普遍有用的[0-9]更简洁,所以只需在任何地方使用它来实现便携性:

$ printf "12\na\na12\ndaab\n"|grep "[0-9]"
12
a12

请注意,理论上您应该使用字符类[:digit:],但我从未听说过与[0-9]不同的字符集,并且它不会被接受因为YMMV使用它所带来的好处。