我有一个类似下面示例的列表,我正在寻找一种方法来提取子域(如果适用)。
10.1.55.2 router1.local.com
192.168.1.5 server1
192.168.1.6 server2.local
如何使用awk,sed或类似工具获取上面的列表并最终获得如下所示的列表?
router1
server1
server2
我相当新手来编写脚本,所以我正在寻找一个可以开始的地方。谢谢!
答案 0 :(得分:2)
我说
awk '{ sub(/\..*/, "", $2); print $2 }' hosts
这会在第二个字段的第一个句点之后切断所有内容并打印结果。
附录:由于hosts
文件行中可能有多个主机名,并且要排除注释行,您可能需要使用
awk '!/^#/ { for(i = 2; i <= NF; ++i) { sub(/\..*/, "", $i); print $i } }' hosts
抓住他们所有人。
答案 1 :(得分:0)
通过sed,
$ sed 's/^[^ ]* \|\..*//g' file
router1
server1
server2
通过awk,
$ awk '{ split($2,a,/\./); print a[1] }' file
router1
server1
server2
答案 2 :(得分:0)
awk '!/#/{print $2}' hosts | awk -F"." '{print $1}'
忽略其中包含#个字符的行
答案 3 :(得分:0)
这是一个bash版本:
while read ip host; do echo ${host%%.*}; done < list
${host%%.*}
表达式会删除从字符串末尾到第一个句点的所有内容。