各ホスト(.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/'