免费注册 查看新帖 |

Chinaunix

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

sed的h和g命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-02 20:22 |只看该作者 |倒序浏览
>>>cat foo
first line
second line
third line

>>>cat foo | sed -e '/third/{h;d;}' -e '/first/{G;}'
first line

second line

为什么从缓冲区里取出来的是空行,而不是"third line"?

论坛徽章:
0
2 [报告]
发表于 2008-12-02 20:27 |只看该作者
你写的代码有问题

论坛徽章:
0
3 [报告]
发表于 2008-12-02 20:28 |只看该作者
>>>cat foo | sed -e '/first/{h;d;}' -e '/second/{G;}'
second line
first line
third line


这个就是正常的?

[ 本帖最后由 wertyu 于 2008-12-2 20:34 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-12-02 20:29 |只看该作者
原帖由 angeljyt 于 2008-12-2 20:27 发表
你写的代码有问题

什么问题?

论坛徽章:
0
5 [报告]
发表于 2008-12-02 20:29 |只看该作者
first line
second line
third line

sed -e '/third/{h;d;}' -e '/first/{G;}'
每一行两个模式都会被执行到,默认sed输出所有行
第1行:输出第1行,不匹配/third/所以不会执行第一个括号内的语,执行后面一个语句由于没有内容所以取回来的是空的
第2行:输出第 2行,2个模式都不匹配所以都不会执行到
第3行:匹配第一个模式所以会删除这一行,但是不匹配第二个模式所以不会执行

[ 本帖最后由 angeljyt 于 2008-12-2 20:34 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-12-02 20:32 |只看该作者
原帖由 angeljyt 于 2008-12-2 20:29 发表
first line
second line
third line


>>>cat foo | sed -e '/third/{h;d;}' -e '/first/{G;}'



????

论坛徽章:
0
7 [报告]
发表于 2008-12-02 20:35 |只看该作者
first line
second line
third line

sed -e '/third/{h;d;}' -e '/first/{G;}'
每一行两个模式都会被执行到,默认sed输出所有行
第1行:输出第1行,不匹配/third/所以不会执行第一个括号内的语,执行后面一个语句由于没有内容所以取回来的是空的
第2行:输出第 2行,2个模式都不匹配所以都不会执行到
第3行:匹配第一个模式所以会删除这一行,但是不匹配第二个模式所以不会执行

论坛徽章:
0
8 [报告]
发表于 2008-12-02 20:45 |只看该作者
原帖由 angeljyt 于 2008-12-2 20:35 发表
first line
second line
third line

sed -e '/third/{h;d;}' -e '/first/{G;}'
每一行两个模式都会被执行到,默认sed输出所有行
第1行:输出第1行,不匹配/third/所以不会执行第一个括号内的语,执行后面 ...


ok ,我明白了,非常感谢

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
9 [报告]
发表于 2008-12-02 23:01 |只看该作者
first line
second line
third line

sed -e '/third/{h;d;}' -e '/first/{G;}'

1 第一行匹配/first/执行G命令, 附加一个空行(开始的保存空间无内容)到第一行后,输出第一行内容和一个空行
2 条件都不成立,默认输出第二行内容
3 /third/成立,执行h命令,复制模式空间(pattern space)内容到保存空间(hold space),d命令删除模式空间内容,并开始下次循环,因为文件结束所以结束命令

[ 本帖最后由 ynchnluiti 于 2008-12-2 23:05 编辑 ]

论坛徽章:
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
10 [报告]
发表于 2008-12-03 09:01 |只看该作者

回复 #1 wertyu 的帖子

本来就空的,输出后当前是空行。

并不是有前面的代码就先执行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP