理解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中第一行数据。反复如此,则每两行中总只有第一行输出。