如何在perl或unix命令行上删除(删除)单词

时间:2011-03-07 23:23:23

标签: perl unix

我想从设备列表文件中删除域名。我有(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

感谢,

5 个答案:

答案 0 :(得分:1)

更新2

使用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

打破表达:

  • s / 我们正在使用sed(老实说我是 不知道这是做什么的)
  • ^ 开始 与
  • 一致的行
  • \(\)逃脱 括号。发现之间的任何模式 这些都可以用 占位符\ 1
  • \ w * 任何字母数字字符[A-Za-z0-9 _]
  • [。] 文字句号
  • $ 标记该行的结尾
  • / 将查找模式与结果模式分开
  • \ 1 获取括号 \( \)
  • 之间匹配模式的占位符
  • / 结束sed表达式

答案 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