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