免费注册 查看新帖 |

Chinaunix

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

sed的N命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-12 11:28 |只看该作者 |倒序浏览
[root@oracle ForVMC]# cat m
Unix System
G.D. Unix System
G.D.

[root@oracle ForVMC]# sed -n 'N;p' m
Unix System
G.D. Unix System
                                
[root@oracle ForVMC]# sed -n '$!N;p' m
Unix System
G.D. Unix System
G.D.

[root@oracle ForVMC]# sed 'N' m
Unix System
G.D. Unix System
G.D.  --这行为什么会打印出来呢?m只有三行,在N作用于最后一行的时候应该是立即退出的啊?且不打印这行的;虽然没有指定-n选项,但是默认的p命令应该是被当成最后一个命令,但是现在这样的输出又好像是N在应用于最后一行时p是在N前执行的??!!

论坛徽章:
0
2 [报告]
发表于 2010-11-12 11:36 |只看该作者
我希望的执行步骤和结果:
[root@oracle ForVMC]# cat m
Unix System
G.D. Unix System
G.D.

[root@oracle ForVMC]# sed 'N' m
Unix System   
G.D. Unix System
G.D.

读取第一行时: step1:应用N命令-->模式空间内容Unix System\nG.D. Unix System
                             step2:遇到隐式的p命令(因为没有-n选项),打印输出Unix System\nG.D. Unix System
                             step3:读取第三行-->尝试应用N,但是没有下一行了,sed立即退出,后面的隐式p命令没有执行

按照我的想法,最后的输出应该只有Unix System\nG.D. Unix System的啊?还请哪位指点下,谢谢

论坛徽章:
0
3 [报告]
发表于 2010-11-12 11:39 |只看该作者
在学sed,搞到这里有点晕

论坛徽章:
0
4 [报告]
发表于 2010-11-12 11:41 |只看该作者
最后一行不是N命令读入的,而是默认的获取下一行

论坛徽章:
0
5 [报告]
发表于 2010-11-12 11:48 |只看该作者
回复 4# rpbear


    你好,谢谢你的回复,不过还是不理解,你能按照我在2楼的解释步骤解释下么,呵呵,我的理解能力有限,谢谢了

论坛徽章:
0
6 [报告]
发表于 2010-11-12 11:50 |只看该作者
主要是第三步,sed肯定不是以我这样的机制来工作的,所以重点帮忙解释下这步

论坛徽章:
0
7 [报告]
发表于 2010-11-12 11:54 |只看该作者
脚本开始运行的时候
Unix System被默认读入模式空间,然后执行N,模式空间变为
Unix System\nG.D.Unix System然后执行隐式p,打印得到

Unix System   
G.D. Unix System
之后默认加载下一行输入,然后执行N,这是最后一行所以按你说的退出了,之后执行隐式的p输出最后一行,也就得到了最后结果

论坛徽章:
0
8 [报告]
发表于 2010-11-12 12:02 |只看该作者
[root@oracle ForVMC]# sed 'N;s/G/M/' m
Unix System
M.D. Unix System
G.D.

N如果没有下一行可读的,N后面的命令是不会执行的(类似d命令),但是上面这个例子好像是这样的:
N跳过了所有的显式命令总是执行最后的隐式p命令,是这样么?

论坛徽章:
0
9 [报告]
发表于 2010-11-12 12:07 |只看该作者
我觉得是这样的,模式空间里有内容的时候,只要没有抑制输出(-n),就会输出最后的内容,即使N退出。你可以测试这个脚本理解一下N在最后一行的行为
sed -n "N;p" file
如果什么错误也请大家指出,我也刚学呵呵回复 8# linuxocp

论坛徽章:
0
10 [报告]
发表于 2010-11-12 12:12 |只看该作者
回复 9# rpbear


    嗯,这样理解很好,我总是认为把没有-n选项的sed是通过最后添加p命令来实现的,而你是基于模式空间是否有内容来判断;看来目前只能这样理解了,谢谢朋友
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP