标题: sed的N命令 [打印本页] 作者: linuxocp 时间: 2010-11-12 11:28 标题: sed的N命令 [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前执行的??!!作者: linuxocp 时间: 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
G.D. Unix System
之后默认加载下一行输入,然后执行N,这是最后一行所以按你说的退出了,之后执行隐式的p输出最后一行,也就得到了最后结果作者: linuxocp 时间: 2010-11-12 12:02
[root@oracle ForVMC]# sed 'N;s/G/M/' m
Unix System
M.D. Unix System
G.D.
我把N命令的英文解释给你看看吧。The 'N' command does not print out the current pattern space and does not empty the pattern space.
It reads in the next line, but appends a new line character along with the input line itself to the pattern space.作者: linuxocp 时间: 2010-11-12 17:28
呵呵,其实这个帖子已经不是N的问题了,而是我对sed -n和没有-n时的工作机制理解有问题,N命令本身很容易理解