Bash 스크립트 변수에서 sed/awk 사용

Bash 스크립트 변수에서 sed/awk 사용

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.netgrep 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를 설치해야 합니다.

관련 정보