sed匹配数字的疑惑

angus2887 2012-11-18 06:07:57
日志文件中其中一行内容为:abc135hello
想使用正则找到这一样,分别使用命令egrep和sed。
问题1:数字匹配上\d是用来匹配数字的,使用\d+匹配不到135,但是必须用[0-9]才可以
问题2:egrep命令使用[0-9]+正则可以匹配到135,sed命令却不行
[root@livedvd log]# egrep "abcd[0-9]+hello" tmp.txt
abcd135hello
[root@livedvd log]# egrep "abcd\d+hello" tmp.txt
[root@livedvd log]# sed -n '/abcd[0-9]+hello/p' tmp.txt
[root@livedvd log]# sed -n '/abcd\d+hello/p' tmp.txt
[root@livedvd log]#

后来尝试单独看看\d在sed中能匹配到什么,发现匹配到的是字母d而不是数字
[root@livedvd log]# sed -n 's/\d/AAAAAAAAAAAA/p' tmp.txt
abcAAAAAAAAAAAA135hello
[root@livedvd log]#

这应该都是简单的正则匹配,不知道原因在什么地方,求解答,谢谢
...全文
2034 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏天__ 2014-07-01
  • 打赏
  • 举报
回复
引用 6 楼 fdl19881 的回复:
http://blog.csdn.net/fdl19881/article/details/7800877
学习了
angus2887 2012-11-19
  • 打赏
  • 举报
回复
问题解决,看来脚本能用perl写还是尽量用perl或python,正则支持最好的
fdl19881 2012-11-18
  • 打赏
  • 举报
回复
http://blog.csdn.net/fdl19881/article/details/7800877
fdl19881 2012-11-18
  • 打赏
  • 举报
回复
看这篇文章,详细介绍了哪些支持,哪些不支持。以及grep ,grep -e ,egrep的区别
引用 3 楼 angus2887 的回复:
引用 1 楼 zhaom_916 的回复:是不是Linux shell中正则表达时中\d不是匹配的数字啊,数字匹配一直的的是[0-9] 关于shell的教材提到正则的时候都有\d的说明,而且用\w是有效的,就是很奇怪为什么\d不行
mymtom 2012-11-18
  • 打赏
  • 举报
回复
是不是Shell的转义问题 楼主试试 sed -E -n 's/\\d/AAAAAAAAAAAA/p' tmp.txt
angus2887 2012-11-18
  • 打赏
  • 举报
回复
引用 1 楼 zhaom_916 的回复:
是不是Linux shell中正则表达时中\d不是匹配的数字啊,数字匹配一直的的是[0-9]
关于shell的教材提到正则的时候都有\d的说明,而且用\w是有效的,就是很奇怪为什么\d不行
mymtom 2012-11-18
  • 打赏
  • 举报
回复
egrep 不支持 \d (属于shorthand character classed), perl和java支持\d
半个灵魂 2012-11-18
  • 打赏
  • 举报
回复
是不是Linux shell中正则表达时中\d不是匹配的数字啊,数字匹配一直的的是[0-9]

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧