如何解析命令中特定单词后的信息

如何解析命令中特定单词后的信息

我从命令中获取信息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 获取所有内容以及进一步的内容,但这给了我空结果。我打算使用cutafter 的命令sed来获取主机名。

答案1

关于Master\sHost您的 sed 脚本,有两个可能失败的原因:

  1. 输入host以小写开头,h因此Host不会匹配,
  2. \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

相关内容