명령에서 특정 단어 뒤의 정보를 구문 분석하는 방법

명령에서 특정 단어 뒤의 정보를 구문 분석하는 방법

명령에서 정보를 얻고 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'빈 결과가 나왔습니다. 호스트 이름을 얻으려면 cutafter 명령을 사용할 계획입니다 .sed

답변1

sed 스크립트 와 관련하여 Master\sHost실패할 수 있는 이유는 두 가지가 있습니다.

  1. 입력이 host소문자로 시작하므로 h일치 Host하지 않습니다.
  2. \sGNU 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

관련 정보