我有一个非常大的主机名列表,我试图从中打印每个主机的 TLD(.com、.net、.info 等)。问题是主机的 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 文件确实不是在其末尾有注释,那么 Steeldriver 的注释命令就是我将如何做到的。告诉 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/'