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をインストールする必要があります。

関連情報