DNS 서버의 이름을 얻으려고 합니다 4.2.2.1
.
이것을 사용하면 host 4.2.2.1
다음과 같은 출력을 얻습니다.
1.2.2.4.in-addr.arpa domain name pointer a.resolvers.level3.net
내 스크립트에서는 다음을 수행합니다.
name="$($host $server)"
변수를 제거 할 수 없도록 완전히 다른 서버에서 이것을 사용할 것이라는 점을 염두에 두고 sed/awk를 사용하여 $name
을 가져오려면 어떻게 해야 합니까 ?a.resolvers.level3.net
grep a.resolvers
답변1
또 다른 옵션은 문자열을 분할하는 것입니다.
echo ${name##* }
이렇게 하면 문자열이 분할되고 마지막 공백부터 끝까지 부분이 유지됩니다.
${name <-- from name
## <-- trim the front
* <-- matches anything
' ' <-- until the last ' '
}
답변2
awk
가장 쉬운 방법은 마지막 필드를 인쇄하도록 사용 하고 지시하는 것입니다.
$ echo "$name" | awk '{print $NF}'
a.resolvers.level3.net
물론 서버의 IP만 필요한 경우 name
나중에 처리할 필요가 없도록 먼저 입력할 수도 있습니다.
name=$(host $server | awk '{print $NF}')
답변3
name=$(host "$server" | grep -o '[^[:space:]]*$')
호스트 명령 출력의 꼬리 부분이 선택됩니다.
답변4
문자열 조작을 전혀 포함하지 않는 더 짧은 대답은 다음과 같습니다.
dig +short -x 4.2.2.1
보여주다
a.resolvers.level3.net.
그게 다야. 물론 dig를 설치해야 합니다.