免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1330 | 回复: 7
打印 上一主题 下一主题

问个匹配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-06 00:12 |只看该作者 |倒序浏览
[root@ZTZY tomcat]# more aa
kill
ill
bill
abckill
[root@ZTZY tomcat]#


[root@ZTZY tomcat]# sed -n '/ill/p' aa  #匹配所有包含 ill 的行
kill
ill
bill
abckill
[root@ZTZY tomcat]# sed -n '/.ill/p' aa  #匹配 ill 前至少一个字符的行
kill
bill
abckill
[root@ZTZY tomcat]# sed -n '/*ill/p' aa  # 不懂 为啥没输出呢?
[root@ZTZY tomcat]# sed -n '/.*ill/p' aa # 为啥有. 的匹配再加上*后, ill 行会出现呢?
kill
ill
bill
abckill
[root@ZTZY tomcat]#

sed -n '/ill/p' aa 和 sed -n '/.*ill/p' aa 一样?
很笨 没看出 * 是起什么作用的?

[ 本帖最后由 bleach 于 2007-1-6 00:27 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-06 00:27 |只看该作者
dot match any character( newline is special, man proc when you confused. )
* is a qualifier. The preceding item will be matched zero or more times.

论坛徽章:
0
3 [报告]
发表于 2007-01-06 00:39 |只看该作者
[root@ZTZY tomcat]# sed -n '/.*ill/'= aa
1
2
3
4
[root@ZTZY tomcat]# sed -n '/.*ill/=' aa
1
2
3
4
[root@ZTZY tomcat]#

'/.*ill/'= 和 '/.*ill/=' 没区别吗?

论坛徽章:
0
4 [报告]
发表于 2007-01-06 00:42 |只看该作者
原帖由 Edengundam 于 2007-1-6 00:27 发表
dot match any character( newline is special, man proc when you confused. )
* is a qualifier. The preceding item will be matched zero or more times.

就是这里没懂 *是0或多次匹配 那么按道理 ‘/*ill/’应该是输出所有包含 ill 的行啊 为什么没输出呢?
还是用简体中文描述 我能更清楚 谢谢

[ 本帖最后由 bleach 于 2007-1-6 00:44 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-01-06 00:45 |只看该作者
原帖由 bleach 于 2007-1-6 00:39 发表
[root@ZTZY tomcat]# sed -n '/.*ill/'= aa
1
2
3
4
[root@ZTZY tomcat]# sed -n '/.*ill/=' aa
1
2
3
4
[root@ZTZY tomcat]#

'/.*ill/'= 和 '/.*ill/=' 没区别吗?



读13问, 关于引号的内容吧. sed的=命令打印行号. 命令行如何解释, 我想你读了13问就清楚了...

论坛徽章:
0
6 [报告]
发表于 2007-01-06 00:50 |只看该作者
原帖由 bleach 于 2007-1-6 00:42 发表

就是这里没懂 *是0或多次匹配 那么按道理 ‘/*ill/’应该是输出所有包含 ill 的行啊 为什么没输出呢?
还是用简体中文描述 我能更清楚 谢谢



*使得前驱的字符进行0到多次匹配.
前面一定要有东西, 譬如: a . [] () 这些东西. 单独使用*看下个帖子, 就会和?一样, 产生一些实现(估计是正则库)上的区别. 所以*, ?等一定要跟随有意义的东西后面.

  1. http://bbs.chinaunix.net/viewthread.php?tid=880821&extra=page%3D2
复制代码

论坛徽章:
0
7 [报告]
发表于 2007-01-06 01:15 |只看该作者
学正则表达式最好用 grep --color, sed的s命令, 这样每个正则, 你能清楚看到做了什么样的操作. 方便你根据结果加深对正则表达式的认识. 另外 man, info 看这些东西有时候确实很痛苦, 不过经常看就会好很多. 我觉得多看英文是有很大好处, sed & awk 这本书英文难度不高. 可以慢慢看. 书中第三章介绍的正则部分我觉得还是相当不错的. postgre 数据库中提供了正则表达式, 而其文档中有关于正则表达式的内容, 那部分我觉得相当好, 特别是建立清楚的 BRE, ERE, ARE大局观(即使都用ERE, awk和egrep之间也存在差异). 这些东西, 可以慢慢体会.

unix 和 linux shell编程一书中关于正则的部分不是很难. 网上有电子版, 不过错误多了些>_<.

睡觉了...困>_< 明天上班...

[ 本帖最后由 Edengundam 于 2007-1-6 01:17 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-01-06 01:54 |只看该作者
原帖由 Edengundam 于 2007-1-6 01:15 发表
学正则表达式最好用 grep --color, sed的s命令, 这样每个正则, 你能清楚看到做了什么样的操作. 方便你根据结果加深对正则表达式的认识. 另外 man, info 看这些东西有时候确实很痛苦, 不过经常看就会好很多. 我觉得 ...


十分感谢~~刚去看了下你指引的连接 似懂非懂的状态 呵呵
grep --color 很有用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP