sed/grep/awk を使用して別のフィールドに TLD があるホスト名のリストから TLD を印刷するには?

sed/grep/awk を使用して別のフィールドに TLD があるホスト名のリストから TLD を印刷するには?

各ホスト(.com、.net、.infoなど)のTLDを印刷しようとしている非常に大きなホスト名のリストがあります。問題は、ホストのTLDが別のフィールドにあるため、フィールドを静的に印刷するようにcutまたはawkに通知できないことです。

いくつかのホスト名の例:

examplehost.net                             # tld is 2nd field (period delimited)
subdomain.otherhost.com                      # tld is 3rd field
subdomain.othersubdomain.yetanotherhost.info   # tld is 4th field

小さな回避策として、各ホストの末尾にスペースを追加して正規表現パターンに含めてgrepすることができました。

sed 's/$/ /g' listofhosts.txt | grep -Eo '\.[a-z]{1,10} '

これを行うよりエレガントな方法があるかどうか疑問に思います。

答え1

listofhosts.txt ファイルが次の場合いいえ最後にコメントがあるので、スチールドライバのコメントコマンドを使います。 awkにフィールドをピリオドに分割し、最後のフィールドの値を印刷するように指示します。

awk -F. '{print $NF}' listofhosts.txt

次に続く:

net
com
info

答え2

シングルgrep(もしポリメラーゼ連鎖反応サポート):

grep -Po '.*\.\K[^.]+$' listofhosts.txt 

答え3

grep -oE '\.[^.]+$'

perl -lne 'print /(\.[^.\s]+)\s/'

sed 's/^[[:space:]]*[^[:space:]]\{1,\}\([.][^.[:space:]]\{1,\}\)[[:space:]]\{1,\}.*/\1/'

関連情報