查找一行中的纯数字行(可以包括空格)
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不是表示所有的空白字符吗?
awk正则表达式中的空白字符
-
- 帖子: 64
- 注册时间: 2009-07-02 19:11
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: awk正则表达式中的空白字符
好像不认 \s 吧,从 manpage 中没有找到,但是肯定是认 [:space:] 的。
代码: 全选
awk '/^[[:digit:][:space:]]+$/' a
-
- 帖子: 229
- 注册时间: 2007-07-01 17:36
- 系统: (En):System
- 来自: (En):address
- 联系:
Re: awk正则表达式中的空白字符
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 输出又该不正确了。
我没测试,你自己试试。
不知道你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 输出又该不正确了。
我没测试,你自己试试。
---
regards,
Kent
regards,
Kent
-
- 帖子: 64
- 注册时间: 2009-07-02 19:11
Re: awk正则表达式中的空白字符
我的grep
alias grep='grep --color=auto'
alias grep='grep --color=auto'