• 本页内容

44. 将保持空间复制到模式空间(g 命令)


sed get(g) 命令将保持空间的内容复制到模式空间。

可以这样想:h 命令将其 "保持" 在保持空间中,g 命令从保持空间 "获取" 它。 假设模式空间包含 "line 1",保持空间包含 "line 2"; 执行 g 命令后,模式空间发生更改,现在包含 "line 2",而保持空间未更改,仍然包含 "line 2"

打印经理的姓名:

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

在上面的例子中:

  • /Manager/!h —— 我们在最后几个示例中一直使用这个。 如果模式空间的内容不包含 Manager,则将模式空间的内容复制到保存空间。
  • /Manager/{g;p} —— g 从保持空间获取行并将其放入模式空间,然后打印它。

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

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

$ chmod u+x g.sed

$ ./g.sed empnametitle.txt
Jason Smith
Jane Miller