永发信息网

sed之N和$N的区别和运用

答案:2  悬赏:60  手机版
解决时间 2021-03-17 18:45
sed之N和$N的区别和运用
最佳答案
首先看看它们的区别:

$ seq 5
1
2
3
4
5
$ seq 5 | sed -n 'N;P' #命令⑴
1
3
$ seq 5 | sed -n '$!N;P' #命令⑵
1
3
5

N的作用是读取下一行的内容到模式空间(pattern
space),阁下可以理解为sed这时候把两行读入成中间带\n的一行内容,原本sed的执行原理是逐行读取到模式空间,N呢就促使sed把下一行内容也同时读取到模式空间待命。在命令⑴中,这时候N就让sed把1、2行同时读入了模式空间,P是打印模式空间第一行内容,这时候1就输出到了屏幕,接着读入3、4行输出3到屏幕上,到了最后一行第5行,为什么没有输出呢?原来N还有另外一个特性:当无法处理下一行内容时,N则会中止退出,所以后面的命令也不会再执行。这就不难解释为什么没有输出第5行了,到了最后一行已经没有下一行处理了,所以N就退出命令,后面的P也不会执行,这时候如命令⑵:$!N
对最后一行不再执行N命令,则会继续执行命令P,打印模式空间的第一行,5就输出到了屏幕。那么下面的命令怎么又没有区别呢?$ seq 5 | sed 'N;s/\n/ /' #命令⑶

1 2
3 4
5
$ seq 5 | sed '$!N;s/\n/ /' #命令⑷
1 2
3 4
5

为什么呢?大家注意观察该sed没有参数
-n,原因就在这里,sed是默认输出模式空间里的内容,当执行到最后一行时,命令⑶的N无法处理下一行内容,就退出了命令,不执行后面的替换语句,但是sed默认会输出该行内容,所以5仍然输出到了屏幕上。命令⑷中呢,到了最后一行,N没起作用,后面的替换执行也是不成功的,但sed还是会默认输出该行内容,5也出现在了屏幕上,最后两个命令的结果一样,但是过程是不一样的。我再重复一下:命令⑶执行到最后一行时N中止了命令,sed默认输出了该行内容,而命令⑷则执行了后面的替换动作,只是替换不成功没起到任何作用,sed也仍然输出了该行内容。大家明白了吗?我们也可以加
-n 参数就可以看出差别了:

$ seq 5 | sed -n 'N;s/\n/ /;p'
1 2
3 4
$ seq 5 | sed -n '$!N;s/\n/ /;p'
1 2
3 4
5

加了 -n 参数后,N中止了命令,后面的p也没有执行,所以第5行没有输出,而 $!N 会对最后一行不操作,N没有起作用,所以没有中断后面的语句执行,p把5输出到了屏幕上。

总结:N 和 $!N 有时候结果并没有差异,那是因为sed默认是输出模式空间内容的。当有 -n 参数时大家就要注意它们两个之间的运用了。
全部回答
可以私聊我~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
英语BLOOD-C The Last Dark 怎么读?意思是?
lol劫是个打什麽位置的?
火锅小料一般有那些,怎么来调制
哈尔滨市液化石油气公司地址在哪,我要去那里
容桂哪里回收微图手机
be good to是什么意思?
巴西对中国钢管征收反倾销税是利好还是利空
2万1扣百分之四的税是多少?
愤恨不平是什么意思及造句
请问这个积分部分,是如何计算出和x^4同阶呢
为什么我的笔记本电脑键盘输入O时会变成6?我
DNF有哪些护腿加速度的?只要护腿的
沭阳民生城市公共交通有限公司地址在什么地方
起亚智跑手动挡变速箱压盘,片子好的多少钱
活动现场有人丢失物品,主办方是否该负责任?
推荐资讯
武义县俞源乡马卜村村民委员会在什么地方啊,
三星s7如何查看是否有4g网络
我的交通银行信用卡为什么不能申请分期还款
看图猜成语一个月亮抱着一只鸡
爱丽思婚纱摄影在哪里啊,我有事要去这个地方
笋岗工艺城·玉石馆我想知道这个在什么地方
延安烟草卷烟零售富县直营店这个地址在什么地
我从贵阳坐到厦门的车,但是我是去江西赣州,
权健洁净宝的副作用
五象阳光尚都是回迁房吗,有预售证吗
河南曲剧下载 最好是百度云,mp4模式
没生过孩子的阴唇是什么颜色
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?