• 本页内容

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