我从命令中获取信息gpstate -s
,并打印出我想要删除的调试信息。我特别想保存一行,那就是这一Master Host
行。我需要主主机的值(我将其更改为 HostName),以便我可以将其存储为环境变量。
20210805:00:02:22:025334 gpstate:HostName:gpadmin-[INFO]:-Obtaining Segment details from master...
20210805:00:02:22:025334 gpstate:HostName:gpadmin-[INFO]:-Gathering data from segments...
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:-----------------------------------------------------
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:--Master Configuration & Status
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:-----------------------------------------------------
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:- Master host = HostName
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:- Master postgres process ID = 5000
20210805:00:02:23:025334 gpstate:HostName:gpadmin-[INFO]:- Master data directory = /data/master/gpseg-1
我尝试使用gpstate -s | sed -n -e 's/^.*Master\sHost //p'
从 Master Host 获取所有内容以及进一步的内容,但这给了我空结果。我打算使用cut
after 的命令sed
来获取主机名。
答案1
关于Master\sHost
您的 sed 脚本,有两个可能失败的原因:
- 输入
host
以小写开头,h
因此Host
不会匹配, \s
是仅 GNU sed 支持的简写,可[[:space:]]
在 POSIX sed 或[ \t]
任何 sed 中使用。
您可以使用awk
:
$ gpstate -s | awk -F'= ' '/Master host/ { print $2 }'
HostName
和sed
:
$ gpstate -s | sed -n '/Master host/s/.*= //p'
HostName