Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1308934
  • 博文数量: 268
  • 博客积分: 10698
  • 博客等级: 上将
  • 技术积分: 2867
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-14 22:21
文章分类

全部博文(268)

文章存档

2012年(19)

2011年(13)

2010年(29)

2009年(26)

2008年(99)

2007年(82)

我的朋友

分类:

2010-02-24 17:23:09

匹配空白(space与tab)的标准写法是 [ \t],当然也有其它的写法,[ \t]算是最简单、最流行的写法了,还一种很不可靠的写法\s ,虽然它在很多时候也能匹配space与tab,与[ \t]的功能似乎相同,而且形式更为简略,但是这个\s一定要慎用,能不用就不用,因为有大大的bug,举例说明 :

文本文件data_file的数据如下:
/bin/basename           /bin/cat                /bin/chgrp
/bin/chmod              /bin/chown              /bin/cp
/bin/cut                /bin/date               /bin/dd
/bin/df                 /bin/echo               /bin/env
/bin/expr               /bin/false              /bin/id
/usr/bin/csplit         /usr/bin/cut            /usr/bin/dir
/usr/bin/dircolors      /usr/bin/dirname        /usr/bin/du
/usr/bin/env            /usr/bin/expand         /usr/bin/expr
/usr/sbin/chroot

现在要把目录名去掉,只留下后面的可执行文件名称:
# sed -r 's/[^ \t]+bin\///g' data_file  这样是可行的
# sed -r 's/[^\s]+bin\///g' data_file   这样不可行 !

sed版本是4.2,曾经很疑惑为什么\s如此简单的写法却经常被排除在主流用法之外,原来如此。

通过上面的那个例子,我还发现了sed-4.2 正则的其它的bug,当tab符号单独使用的时候,方括号里加上^排除法,即[^\t] ,也会出现错误,但本人很忙,没空去报告。
阅读(5715) | 评论(0) | 转发(0) |
0

上一篇:grub.cfg

下一篇:emerge 路径

给主人留下些什么吧!~~