+ -
当前位置:首页 → 问答吧 → sed 中 \w \s 等字符也是被支持的吗?

sed 中 \w \s 等字符也是被支持的吗?

时间:2011-05-24

来源:互联网

刚才看到一个帖子,生出了两个疑问。

1 sed不是仅仅支持BRE吗?\s,\w之类应该是PCRE中的,为什么如下两个命令是支持的呢?

#echo "12 34" | sed 's/\s/X/'
12X34

[root@dns-pub /etc/namedb]
#echo "12 34" | sed 's/\w/X/'
X2 34

我在http://www.faqs.org/faqs/editor-faq/sed/ 查了一下,只有在6.8.3的D小节(sedmod v1.0)指出了sed支持 \s,该小节同时指出sed还支持\d ,但是经过我测试 \d 却又不被支持:
[root@dns-pub /etc/namedb]
#echo "12 34" | sed 's/\d/X/'
12 34

sed支持以 \ 开头的哪些字符?有没有权威的文档可以查查的?

2 [\w] 表示的应该是"\" 或者 "w",[\s] 表示的应该是"\" 或者 "s"。测试结果也没有问题:
[root@dns-pub /etc/namedb]
#echo "s12 34w" | sed 's/[\w]/X/g'
s12 34X

[root@dns-pub /etc/namedb]
#echo "s12 34w" | sed 's/[\s]/X/g'
X12 34w

但是为什么 [\t] 依然表示 TAB?测试结果如下:
[root@dns-pub /etc/namedb]
#echo "12\t34" | sed 's/[\t]/X/'
12\t34

[root@dns-pub /etc/namedb]
#echo -e "12\t34" | sed 's/[\t]/X/'
12X34

这个是不是表示在[]中,最好把\放在最后,以免造成误伤?

我的环境
OS:rhel5.3
sed version 4.1.5

作者: ttt3278   发布时间: 2011-05-24

支持

作者: xiaopan3322   发布时间: 2011-05-24

http://www.gnu.org/software/sed/manual/sed.html

谁写的sed 当然看谁的文档 ,太详细了

你的所有疑问都可解

作者: ziyunfei   发布时间: 2011-05-24

回复 ziyunfei


   

作者: yinyuemi   发布时间: 2011-05-24