分页: 1 / 1

awk正则表达式中的空白字符

发表于 : 2011-04-30 20:27
shmily623
查找一行中的纯数字行(可以包括空格)
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不是表示所有的空白字符吗?

Re: awk正则表达式中的空白字符

发表于 : 2011-04-30 22:11
aerofox
好像不认 \s 吧,从 manpage 中没有找到,但是肯定是认 [:space:] 的。

代码: 全选

awk '/^[[:digit:][:space:]]+$/' a

Re: awk正则表达式中的空白字符

发表于 : 2011-05-03 12:59
sk1418
awk 使用 ERE, ERE里没有\s \S
不知道你grep是不是alias,如果就是默认的grep,它是使用BRE, 你可以试试grep -E ,让它使用ERE,输出也应该不正确。
sed也是一样,默认使用BRE,
sed -n '/^\s*\([0-9]\s*\)*$/p' t.txt
应该输出正确。
但是如果你使用ERE: sed -nr '/^\s*\([0-9]\s*\)*$/p' t.txt 输出又该不正确了。

我没测试,你自己试试。

Re: awk正则表达式中的空白字符

发表于 : 2011-05-03 16:56
shmily623
我的grep
alias grep='grep --color=auto'