免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
91 [报告]
发表于 2013-01-08 10:28 |只看该作者
回复 90# yinyuemi
Thanks,学习学习。


   

论坛徽章:
0
92 [报告]
发表于 2013-01-31 10:18 |只看该作者
谢谢哦,辛苦辛苦!

论坛徽章:
0
93 [报告]
发表于 2013-10-30 16:55 |只看该作者
javashell 发表于 2012-05-01 23:48
感觉不是这样哦,每一行都只会读一次到模式空间吧?

读入第一行,执行第一个-e的d命令,然后直接回到命 ...




我也有同样疑问

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
94 [报告]
发表于 2014-01-12 23:07 |只看该作者
mark下,明早上班看。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
95 [报告]
发表于 2014-04-25 17:25 |只看该作者
An address range can be specified by specifying two addresses separated by a comma (,).An address range matches lines starting from where the first address matches, and continues until the second address matches (inclusively).

从匹配address1的行开始,一直继续直到第二个地址匹配上为止,注意unitl

address1/2可以为line number或者regexp或者2者结合。

分以下情况

1) 正常匹配,address1/2都匹配上了,在此不多解释。

2) seq 6 |sed '3,/2/d'
    1
    2
    解释,1,2行不匹配address1(这里是3),默认打印,从第3行开始,匹配了,根据上述解释,从3行开始,继续读取,处理,直到匹配/2/结束,因为这里没有/2/,所以3,4,5,6都执行d。
3)

If the second address is a number less than (or equal to) the line matching the first address, then only the one line is matched

    seq 6|sed '5,3d'

    address1 > address2 ,所以只有第5行被d删了。


至于楼主的第二个例子,目前还没有找到任何令人信服的说明,姑且认为是属于第3种情况吧,sedsed看到debug也看不到为什么?

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
96 [报告]
发表于 2014-04-28 10:39 |只看该作者
回复 30# blackold


    学习中,mark下!

论坛徽章:
6
处女座
日期:2014-04-02 16:07:17酉鸡
日期:2014-04-14 10:09:22子鼠
日期:2014-04-17 11:57:30辰龙
日期:2014-09-01 17:14:08戌狗
日期:2014-10-28 12:25:54未羊
日期:2014-11-14 11:31:58
97 [报告]
发表于 2014-04-28 12:00 |只看该作者
回复 5# yinyuemi


    学习了,膜拜

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
98 [报告]
发表于 2014-04-28 16:33 |只看该作者
回复 5# yinyuemi
回复 30# blackold
  1. Three  things  to note about address ranges: the syntax is addr1,addr2 (i.e., the addresses are separated by a
  2.        comma); the line which addr1 matched will always be accepted, even if addr2 selects an earlier line; and if addr2 is a regexp, it will
  3.        not be tested against the line that addr1 matched.
复制代码
挖坟回答一下,看官方手册有3个说明暗示,其中第二个是addr1一直会被接受,这样理解就合理了,第二个-e的时候,-e '1,2d' 虽然是第三行,address1是1,但always be accepted ,even if addr2 selects an earlier line.

此外下边还有一个

If the second address is a number less than (or equal to) the line matching the first address, then only the one line is matched。

跟上述的Note 2是相吻合的。

所以该行会被处理,删了3. 这个是最合理的解释了。

此外补充一下0,/regexp/这种,基本上等价于1,/regexp/只有当第一行匹配/regexp/的时候,二者做法不同
  1. echo 'abc
  2. 2
  3. 3
  4. 4
  5. 5
  6. xyz'|sed -n '0,/abc/p'
  7. abc
复制代码
结束,只打印第一行匹配的结果,而1,/regexp/会正常展开,

  1. echo 'abc
  2. 2
  3. 3
  4. 4
  5. 5'|sed -n '1,/abc/p'
  6. abc
  7. 2
  8. 3
  9. 4
  10. 5
复制代码
此时符合我回复过的情况,从addr1开始搜,一直找到addr2为止(直到文本处理完毕)

此帖可以关闭了.

论坛徽章:
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
99 [报告]
发表于 2014-04-28 21:30 |只看该作者
回复 98# expert1


    嗯,这正是我上面提到的啊。也注明参考了 sed man。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
100 [报告]
发表于 2014-04-29 08:31 |只看该作者
回复 98# expert1


    向TOM致敬!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP