免费注册 查看新帖 |

Chinaunix

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

[学习共享] sed-n/N/g/G/h/H/x……进来顶顶吧 [复制链接]

论坛徽章:
2
未羊
日期:2013-11-05 11:40:14双子座
日期:2014-01-03 17:11:01
21 [报告]
发表于 2012-09-14 14:13 |只看该作者
回复 1# smallpboy

最近在学sed,我看了下这位大哥写的,一开始我就不懂

“[smallpboy @local tmp]$ seq 4 | sed ‘n;d’
1
3
pattern space先读入1,然后执行到n,把下一行2读入pattern space中并覆盖原本的1。然后pattern space中的内容(2)被删除(d操作),所以打印出1\n3。”
上面是你的例子。

你给的这个例子我的理解是sed读取第一行1到pattern space,此时pattern space的内容为1;
执行到n的话把下一行的2读入并覆盖pattern space的内容1,此时pattern space中的内容为2;
执行d的话就是把pattern space中的内容全部删除,所以我的理解应该是打印出空啊,我感觉我哪边的理解出问题了,请大哥和各位大牛不吝赐教,谢谢。
   

论坛徽章:
0
22 [报告]
发表于 2012-09-14 14:57 |只看该作者
sed应该是这样的。你不用"-n"指定它静默模式的话,当pattern space被替换时是会自动输出的,除非是被删除了才不会输出。你加上"-n",变换下各种表达式,看看结果。这文章写的不好,它是我第一次学时写的。你加我QQ1174735286,有不懂的再问吧。
回复 21# kanhuijilei


   

论坛徽章:
2
未羊
日期:2013-11-05 11:40:14双子座
日期:2014-01-03 17:11:01
23 [报告]
发表于 2012-09-14 15:33 |只看该作者
回复 22# smallpboy

就是说pattern space中的1被2替换的话,1就会被打印出来?我刚加你qq了
   

论坛徽章:
0
24 [报告]
发表于 2012-09-20 16:29 |只看该作者
每日一顶啊~~

论坛徽章:
0
25 [报告]
发表于 2012-11-20 17:08 |只看该作者
醍醐灌顶,多谢分享~

论坛徽章:
0
26 [报告]
发表于 2013-01-22 17:24 |只看该作者
过来顶顶了~~

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
27 [报告]
发表于 2013-01-22 18:32 |只看该作者
本帖最后由 cao627 于 2013-01-22 19:15 编辑
[smallpboy @local tmp]$ seq 4 | sed ‘n;d’
1
3
pattern space先读入1,然后执行到n,把下一行2读入pattern space并覆盖原本的1。然后pattern中 space中的内容(2)被删除(d操作),所以打印出1\n3。


pattern space先读入1,然后执行到n,n会先把当前pattern space的内容送到所有命令之后,所以1被打印出,(当然是sed 没带-n选项的缘故),再把下一行2读入pattern space并覆盖原本的1(如果直接想象成1被n转移到了模式空间的出口,即所有命令之后,也就无所谓覆盖)。然后pattern中 space中的内容(2)被删除(d操作)。即1被n这条机械臂放到了d之后,被传送带送入下道工序——打印(sed -n ‘’相当于关闭打印机的全程开启状态),2则被d踢到垃圾桶里去了

所以:
seq 5 | sed -n 'n;p'
结果为:
2
4
原因:
-n 关闭了打印机的全程开启状态;
pattern space先读入1,然后执行到n;n会先把当前pattern space的内容送到所有命令之后,这里是p之后,此时p还没被执行,即打印机还没开启,所以1被漏印,n再把下一行2读入pattern space,然后执行到p,打印机开启,2被打印。
同理3,5被漏印。




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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP