• 本页内容

42. 将模式空间复制到保存空间(h 命令)


保持命令 (h) 将模式空间复制到保持空间。 与 x 命令不同,h 命令不会更改模式空间的内容。保持空间的先前内容将被模式空间中的内容覆盖。

假设模式空间包含 "line 1",保持空间包含 "line 2"; 执行h命令后,模式空间没有改变,仍然有 "line 1",但保持空间也有 "line 2"

打印经理姓名:

$ sed -n -e '/Manager/!h' -e '/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller

在上面的例子中:

  • /Manager/!h —— 如果模式空间的内容不包含 "manager"(模式后面的!表示 "不等于" 模式),则将模式空间的内容复制到保留空间。 (在本例中,这可能是员工姓名(或)不是 "manager" 的头衔。)请注意,与前面的示例不同,此示例不使用n命令来获取下一行。相反,下一行是通过正常执行流程获取的。

  • /Manager/{x;p} —— 如果模式空间的内容包含关键字 "manager",则此命令将模式空间与保持空间交换并打印。 这与我们在 x 命令示例中用于打印的命令相同。

您还可以将其保存在 sed 脚本文件中并执行它,如下所示。

$ vi h.sed
#!/bin/sed -nf
/Manager/!h
/Manager/{x;p}

$ chmod u+x empnametitle.txt
$ ./h.sed empnametitle.txt
Jason Smith
Jane Miller