我想从设备列表文件中删除域名。我有(device.marketing.company.com)和其中一些(device.company.com)在我的设备列表上。我只需要设备名称和IP地址。所以我如何从列表中删除域名和子域名。并保留设备名称和IP地址
device1.marketing.company.com 10.1.100.12
device2.marketing.company.com 10.1.100.13
device3.marketing.company.com 10.1.100.14
device4.marketing.company.com 10.1.100.15
device5.company.com 10.1.100.16
device6.company.com 10.1.100.17
device7.company.com 10.1.100.18
我正在寻找的结果
device1 10.1.100.12
device2 10.1.100.13
device3 10.1.100.14
device4 10.1.100.15
device5 10.1.100.16
device6 10.1.100.17
device7 10.1.100.18
感谢,
答案 0 :(得分:1)
使用sed '/\..* /s/\.[^ ]*//' ./devlist
$ cat ./devlist
device1.marketing.company.com 10.1.100.12
device2.marketing.company.com 10.1.100.13
device3.marketing.company.com 10.1.100.14
device4.marketing.company.com 10.1.100.15
device5.company.com 10.1.100.16
device6.company.com 10.1.100.17
device7.company.com 10.1.100.18
device8 10.1.100.19
$ sed '/\..* /s/\.[^ ]*//' ./devlist
device1 10.1.100.12
device2 10.1.100.13
device3 10.1.100.14
device4 10.1.100.15
device5 10.1.100.16
device6 10.1.100.17
device7 10.1.100.18
device8 10.1.100.19
答案 1 :(得分:0)
您可以将设备名称重新设置为单独的列表。 “^(\ w *)[。]。* $”
的影响例如,如果您想使用sed:
sed 's/^\(\w*\)[.].*$/\1/' listfile.txt > output.txt
打破表达:
答案 2 :(得分:0)
cut是一个很好的工具。
me@server:~$ echo hi.com | cut -d"." -f1
hi
me@server:~$ echo higher.hi.com | cut -d"." -f1
higher
me@server:~$
-d给出分隔符。默认情况下,分隔符是制表符 -f给出要使用的字段。 1基于列的索引。
答案 3 :(得分:0)
使用awk代替sed / cut是更好的选择。
$ cat devicefile
device1.marketing.com
device2.marketing.company.com 10.1.100.1
device3.marketing.company.com 10.1.100.2
device4.marketing.company.com 10.1.100.3
$ awk '{split($1,a,".");$1=a[1]}1' devicefile
device1
device2 10.1.100.1
device3 10.1.100.2
device4 10.1.100.3
答案 4 :(得分:0)
sed 's/\([^.]*\)\..* \(.*\)/\1 \2/'
以下说明
\( #Start remembering
[^.]* #A collection of things that don't include periods
\) #Stop remembering
\..* #A period, anything else, and finally a space
\(.*\) #Remember everything after the space
/\1 \2/ #Print out the first section remembered, a space, and the second section