次のAPIを使用してmaster1/2マシンの情報を取得できます。
curl -sH "X-Requested-By: ambari" -u "admin"":""admin" -i http://192.23.39.2:8080/api/v1/hosts?fields=Hosts/host_name,Hosts/ip | egrep "master1|master3" | grep http
"href" : "http://192.23.39.2:8080/api/v1/hosts/master1.usa14.com",
"href" : "http://192.23.39.2:8080/api/v1/hosts/master3.usa14.com",
master1/3のIPのみを取得するようにAPIを更新します。
curl -sH "X-Requested-By: ambari" -u "admin"":""admin" -i http://192.23.39.2:8080/api/v1/hosts?fields=Hosts/host_name,Hosts/ip | egrep "master1|master3" | grep http | sed s'/\/\// /g' | sed s'/:/ /g' | awk '{print $3}'
192.23.39.2
192.23.39.2
しかし、私のAPIはそれほどエレガントではありません。
IPをキャプチャする方法に関する他の提案はありますか?
答え1
awk
文字列操作関数を使用すると、簡単にこれを実行できます。
awk -F'/[/]?' '$NF ~ /^(master1|master3).*/{ n=split($2,arr,":"); print arr[1] }'
答え2
grepを使用してください:
grep 'master[1,3]' | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"
答え3
sedコマンドを使用して完了すると、効果は非常に良いです。
注文する
sed -e "s/.*\:\///g" -e "s/:.*//g" -e "s/\///g" filename
出力
192.23.39.2
192.23.39.2
答え4
また、Pythonを使用して行われました。
import re
p=re.compile(r'[0-9]*\.[0-9]*\.[0-9]*')
k=open('filename','r')
for i in k:
h=re.search(p,i)
print h.group()
出力
192.23.39
192.23.39