忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 1901 | 回复: 10

有个sed的问题,一直想不明白? [复制链接]

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2009-09-05 16:48 |显示全部楼层
本来以为sed中的命令执行到最后的}处才会把模式空间的内容输出。但以下的脚本推翻了这个想法,现在完全不明白sed究竟什么时候会输出文件中的一行(在不用p命令情况下)。
sed '{
/ggggggggg/d
d
:k1 h
/data/b k1
b k1
/hhhhhhhhh/d
}' file1
file1中没有含ggggggggg和hhhhhhhhh这样的行。上面输出为空。

在看一个例子:
sed '{
/ggggggggg/d
:k1 h
n
/data/b k1
b k1
/hhhhhhhhh/d
}' file1
输出为file1的原来内容。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
发表于 2009-09-05 17:03 |显示全部楼层
什么条件都没有加个{}干嘛? sed和awk学混了?

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2009-09-05 17:36 |显示全部楼层

回复 #2 waker 的帖子

加{}表示里面的命令应用于每次读到模式空间的内容,当然这里不加{}也可以,但是加了也不妨碍理解

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2009-09-05 17:38 |显示全部楼层

回复 #2 waker 的帖子

关键是我不明白sed的自动输出时什么时候进行的?

论坛徽章:
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
发表于 2009-09-05 19:08 |显示全部楼层

回复 #4 william_djj 的帖子

到达屁股时自动输出,和消化系统一样。

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2009-09-05 19:30 |显示全部楼层

回复 #5 blackold 的帖子

请认真看看我给的这个例子!b k1是死循环,怎样到达屁股?
sed '{
/ggggggggg/d
:k1 h
n
/data/b k1
b k1
/hhhhhhhhh/d
}' file1
输出为file1的原来内容。

论坛徽章:
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
发表于 2009-09-05 19:40 |显示全部楼层

回复 #6 william_djj 的帖子

还没见过这种写法。

n命令也会产生“自动输出"。

请认真看看sed基础!

论坛徽章:
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
发表于 2009-09-05 19:49 |显示全部楼层

回复 #6 william_djj 的帖子

b k1是死循环,但它没有机会执行。

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2009-09-05 19:59 |显示全部楼层

回复 #7 blackold 的帖子

oh,my God!没有认真看书了。谢谢!

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2009-09-05 20:03 |显示全部楼层

回复 #8 blackold 的帖子

应该是b k1每次都执行,/data/b k1不一定每次都执行。
到达n命令时,输出模式空间的内容,然后读取下一行到模式空间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP