41. 模式空间与保持空间交换(x 命令)
sed 交换 (x
) 命令将模式空间与保持空间交换。这个命令本身并没有多大帮助,除非它与其他 sed 命令结合使用。
但是,与其他命令结合使用时,它的功能相当强大。
假设模式空间包含 "第 1 行"
,保持空间包含 "第 2 行"
。 执行 x
命令后,模式空间将具有 "第 2 行"
,保持空间将具有 "第 1 行"
。
以下示例打印经理的姓名。它查找关键字 "Manager"
并打印上一行。 从 empnametitle.txt
打印经理姓名:
$ sed -n -e 'x;n' -e '/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller
在上面的例子中:
{x;n}
——x
将模式空间交换到保持空间;n
将下一行读入模式空间。 因此,此命令将当前行保存在保持空间中,并将下一行读入模式空间。 对于示例文件,它将员工姓名保存到保持空间,并将员工头衔提取到模式空间。/Manager/{x;p}
—— 如果模式空间的内容包含关键字"Manager"
,则此命令将模式空间与保持空间交换,然后打印模式空间。这意味着如果员工头衔包含"Manager"
,则将打印员工姓名。
您还可以将其保存在 sed 脚本文件中并执行它,如下所示。
$ vi x.sed
#!/bin/sed -nf
x;n
/Manager/{x;p}
$ chmod u+x empnametitle.txt
$ ./x.sed empnametitle.txt
Jason Smith
Jane Miller