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