免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Nalternative
打印 上一主题 下一主题

【5楼解答的很详细,大家可以讨论下】sed 地址和模式匹配的问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-06-26 13:38 |只看该作者
回复 20# lionfun


    我们的时差是15个小时……

论坛徽章:
0
22 [报告]
发表于 2011-06-28 02:20 |只看该作者
回复 21# xiaopan3322


    明白了……

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
23 [报告]
发表于 2011-06-28 09:58 |只看该作者
回复 1# Nalternative


    LZ 很细心啊,很少有人发现这个问题。

   加油!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
24 [报告]
发表于 2011-06-28 09:59 |只看该作者
看完了整个帖子,觉得还没有解释到位。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
25 [报告]
发表于 2011-06-28 10:07 |只看该作者
回复 5# yinyuemi


    赞,支持。
  
    我觉得还不是很严谨,下面是我的观点,大家参考参考。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
26 [报告]
发表于 2011-06-28 10:22 |只看该作者
回复 25# blackold


    坐着小板凳来听黑哥讲解

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
27 [报告]
发表于 2011-06-28 10:31 |只看该作者
不知道这算不算 GNU sed 的拓展,老版本的 sed 处理的更合理一些
  1. $ cat urfile
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. $ sed -e '1,2d' -e '1,2d' urfile                  
  9. 3
  10. 4
  11. 5
  12. 6
  13. $ uname -a
  14. AIX host123 3 5 00CB8FEA4C00
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
28 [报告]
发表于 2011-06-28 10:38 |只看该作者
回复 26# yinyuemi


    相互学习。我只是“解释"——就是猜测。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
29 [报告]
发表于 2011-06-28 10:38 |只看该作者
回复 27# ly5066113


    Tim,说得有理。

   久违了。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
30 [报告]
发表于 2011-06-28 10:39 |只看该作者
本帖最后由 blackold 于 2011-06-28 12:06 编辑

回复 5# yinyuemi


   
1. 这是正常情况,不说了。


2.
<a> "特殊的正常情况"。

<b> 正常情况。

<c>
    第三行为什么还输出?
    真正的原因不好说,看了源码才知道。
    看起来是这样:

    对于 'NUMBER,ADDR2' 这样的地址对,有且仅有一个范围与之匹配成功,就好像是一
    旦匹配成功了,sed就将该地址对从脚本中删除了,后续行没有匹配该地址对的机会。

    地址对就像非诚勿扰中的女生,一旦被一个流氓领走了,下一个流氓就没有机会了。

      
读入第3行时,第一个-e选项的参数 1,2已经"被sed删除了"。第3行尝试执行第二个-e的参数(命令)。



    另外,如果当前行行号大于NUMBER(ADDR1)时,看作是匹配成功——开启范围。

      
因为,3>=1 所以第3行匹配"1,2"地址对,于是d了第3行。

      
    再有, 如果ADDR2是个数字 NUMBER2,当 NUMBER2 <= 开启范围的行号时,那么只匹配一行——即开启范围的行。see gsed man

     
在这里开启范围的行为第3行,而NUMBER2为2。因此只匹配第3行就关闭了范围


    读入第4行时,相当两个-e的参数都"被sed删除了",所以会输出。

awk的地址对与sed不完全相同,这点要注意。


例子:
  1. $ seq 6 |sed -n '2,3p'
  2. 2
  3. 3

  4. $ seq 6 |sed -n '2,2p'
  5. 2


  6. $ seq 6 |sed -n '3,2p'
  7. 3
复制代码

  1. $ cat urfile
  2. 1
  3. 2
  4. 1
  5. 3
  6. 1
  7. 4

  8. $ sed '0,/1/{/1/s//@/}'  urfile
  9. @
  10. 2
  11. 1
  12. 3
  13. 1
  14. 4

  15. $ sed '0,/1/b;0,/1/{/1/s//@/}'  urfile
  16. 1
  17. 2
  18. @
  19. 3
  20. 1
  21. 4

  22. $ sed '0,/1/b;0,/1/b;0,/1/{/1/s//@/}'  urfile
  23. 1
  24. 2
  25. 1
  26. 3
  27. @
  28. 4

复制代码

评分

参与人数 1可用积分 +10 收起 理由
xiaopan3322 + 10 卢瑟报到……

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP