+ -
当前位置:首页 → 问答吧 → 正则表达式匹配行首的问题

正则表达式匹配行首的问题

时间:2011-04-30

来源:互联网

查找一行中的纯数字行(可以包括空格)
cat a

1 2 x
a b 1 2 f
2 3 4
23
上面 的空白全是空格
用grep '^\s*\([0-9]\s*\)*$' a,输出
2 3 4
23
结果正确
用awk '/^\s*([0-9]\s*)*$/' a,输出
23
漏掉了 2 3 4
用awk '/^ *([0-9] *)*$/' a (把\s用空格换掉)
输出

2 3 4
23
结果正确。
这是什么原因?难道在awk中\s不是表示所有的空白字符吗?

作者: shmily623   发布时间: 2011-04-30

好像不认 \s 吧,从 manpage 中没有找到,但是肯定是认 [:space:] 的。
代码:
awk '/^[[:digit:][:space:]]+$/' a

作者: aerofox   发布时间: 2011-04-30