다음 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