- 论坛徽章:
- 6
|
本帖最后由 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被漏印。
|
|