根据系统: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
任何解释和解决方案?
修改
答案 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使用它所带来的好处。