sed 有许多的函数参数。不过今天主要讲 5 个,即 h ,H,g,G,x
函数参数 h
表示将模式空间(pattern space)的数据行 复制 到保持空间(hold space)。
函数参数 H
表示将模式空间(pattern space)的数据行 附加 到保持空间(hold space)。
函数参数 g
表示将保持空间(hold space)的数据行 复制 到模式空间(pattern space)。
函数参数 G
表示将保持空间(hold space)的数据行 附加 到模式空间(pattern space)。
以上四个参数都比较简单,下面重点介绍函数参数 x:
函数参数 x
表示将模式空间(pattern space)与保持空间(hold space)内的内容互相交换。举个例子,我要将下面数据行的第 1 行和第 3 行互换。
数据行为:
The
Unix
and
Linux
Operating
System
上面数据行保存在文件 test 中。那么,sed 命令如下:
sed -e '1h' -e '3x' test
上面例子中,1h 表示当数据行进入 pattern space 后,第 1 行的数据就复制到 hold space。然后输出 pattern space 的内容,直到第 3 行,由于有 3x 参数,表示将 pattern
space 的第 3 行与 hold space 的数据行交换。那么此时输出的 pattern space 的第 3 行 实际上就是 hold space 的第 1 行数据,即 The。余下的行未作处理,按原来顺序输出。
这样,就完成了第 1 行与第 3 行的交换。
有兴趣的读者可以思考如下两个问题,来加深对函数参数 x 或者说是对 pattern space 和 hold space 的更进一步的理解。
问题一:
sed -e '1,2h' -e '4,6x' test
问题二:
sed -e '1,2H' -e '2,5x' test