免费注册 查看新帖 |

Chinaunix

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

sed again~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-26 09:09 |只看该作者 |倒序浏览
  1. #more file
  2. 123
  3. 456
  4. 789

  5. 789
  6. abc
  7. def
  8. #sed -e '/./{H;$!d;}' -e 'x;/abc/!d;' file

  9. 789
  10. abc
  11. def
复制代码
这是sed one-liner中的一道题,目的是得到含有abc的一段,段落之间用空行分隔。
'/./{H;$!d;}'的作用是把一段文本保存在缓冲区内,'x;/abc/!d;'的作用是把缓冲区的内容转给模式空间,然后查询是否包含abc,如果包含则打印出来。
我的问题是:
为什么sed会等到'/./{H;$!d;}'把一整段的内容读完后再执行'x;/abc/!d;'这两个语句不是先后执行的么
求高手给俺详细讲讲!!
谢谢

论坛徽章:
0
2 [报告]
发表于 2010-02-26 09:38 |只看该作者
怎么觉得这么别扭呢~不删除abc的行
为什么789什么的留下了呢~一个空行代表一段所以就都不删除了吗

论坛徽章:
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
3 [报告]
发表于 2010-02-26 09:41 |只看该作者
是先后执行的,只是执行是有条件的,条件不满足时相当于没有执行。

论坛徽章:
0
4 [报告]
发表于 2010-02-26 09:46 |只看该作者
回复 3# blackold


    意思是只有当一段内容都保存到了缓冲区才匹配执行'x;/abc/!d;'的条件么,'x;/abc/!d;'的执行需要什么条件匹配啊,至少前面的x没有条件限制吧,但只要一执行x,不就把缓冲区的内容改了么,求解。。。

论坛徽章:
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
5 [报告]
发表于 2010-02-26 09:55 |只看该作者
回复 4# where27


    $!d是一个循环。当匹配空行时才执行x.

论坛徽章:
0
6 [报告]
发表于 2010-02-26 09:58 |只看该作者
回复 5# blackold


    黑哥~为什么那三行一段呢? /abc/!d. 为什么不删除789啊?不是按行匹配吗

论坛徽章:
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
7 [报告]
发表于 2010-02-26 10:04 |只看该作者
回复 6# iori809


    在这里是多行模式空间(multi-line pattern space)

论坛徽章:
0
8 [报告]
发表于 2010-02-26 10:16 |只看该作者
回复 7# blackold


    多行模式。不是得用N来修饰吗?从哪能看出是多行模式呢黑哥~我知道NPD都是用于多行模式的。但是这里没有啊
麻烦了黑哥呵呵

论坛徽章:
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
9 [报告]
发表于 2010-02-26 10:25 |只看该作者
回复 8# iori809


    没有人也没有资料说过要有N才是多行模式。
   
   死记硬背怎么能学好东西。

论坛徽章:
0
10 [报告]
发表于 2010-02-26 10:28 |只看该作者
回复 9# blackold


    呵呵~有点明白了~那个H本身就是追加的。然后循环后在用x所以就是一个整体了
您说的对黑哥~应该把思路扩展的开阔一些。谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP