理解Sed稍微复杂点的代码,就必须对PatternSpace和HoldingSpace有清晰的理解,下面是网上的一个理解:
sed在处理文件的时候,每一行都需要存放在一个叫“模式空间”的临时缓存区!每处理完一行,便清理一次(pattern space),并把下一行再次放入! 而保留空间(hole space),是当sed用到h命令的时候,把匹配的模式放在一个叫做"hold buffer"的保留缓冲里,但需要使用G(sed的取得命令)的时候,sed 从这个保留空间(hold space)中取得(G)
从n命令看sed的pattern space:
函数参数n 表示读入下一行资料。其指令格式如下:
[address1[ ,address2]] n
sed执行读入下一行动作的情况如下:
1 输出在pattern space 的数据。
2 将下一笔资料读到pattern space。
3 执行下一个编辑指令。
对于1,如果使用了-n选项,则其输出会被抑制
对于2、3,配合起来就能够达到处理特殊行的目的。如下例所示:
命令: sed -n 'n;p' datainput
datainput原始文件:
1 This is what I meant.
2 I love u more than I can say.
3 1+2=3
4 BLue SKy blue sEE
5 DO I speak ENglish?
6
7 See is not Sea~
8 Home!
9
10
输出:
2 I love u more than I can say.
4 BLue SKy blue sEE
6
8 Home!
10
如何打印奇数行呢?用N~
sed -n 'N;P' datainput
输出:
1 This is what I meant.
3 1+2=3
5 DO I speak ENglish?
7 See is not Sea~
9
N读入下一行数据到ps,N输出ps中第一行数据。反复如此,则每两行中总只有第一行输出。