使用Sed将括号(和内容)替换为句点

使用Sed将括号(和内容)替换为句点,sed,Sed,我有DNS日志,其域名采用这种格式(3)www(6)google(3)com(0)。我需要的是www.google.com。此Sed命令将用句点替换括号和内容 s/([0-9])/./g .www.google.com. 现在我需要删除前导和尾随句点。幸运的是,尾随周期在这行的末尾,所以我可以用它来删除它 s/.$//g .www.google.com 有没有一种方法可以在不影响任何其他时段的情况下删除前导时段?不幸的是,提前期不在行首。一行如下所示: 10/09/2013 08:1

我有DNS日志,其域名采用这种格式(3)www(6)google(3)com(0)。我需要的是www.google.com。此Sed命令将用句点替换括号和内容

s/([0-9])/./g 

.www.google.com.
现在我需要删除前导和尾随句点。幸运的是,尾随周期在这行的末尾,所以我可以用它来删除它

s/.$//g 

.www.google.com
有没有一种方法可以在不影响任何其他时段的情况下删除前导时段?不幸的是,提前期不在行首。一行如下所示:

10/09/2013 08:15:57 0B58 PACKET  000000000ED9F540 UDP Rcv 10.35.83.5      c664   Q [0001   D   NOERROR] A      (3)crl(9)microsoft(3)com(0)

有更好的方法吗?

首先用空字符串替换第一次出现的
([0-9])

sed s/([0-9])//  ## no /g at the end!
现在像前面一样执行
sed s/([0-9])/./g
sed s/$///g
。这将起作用,因为您已经假设所有的
([0-9])
只出现在url中

为清晰起见,您可以将这些
sed
操作组合在一起,如:

sed 's/([0-9])//' -e 's/([0-9])/./g' -e 's/.$//g' <filename>
sed's/([0-9])//'-e's/([0-9])///g'-e's/$///g'

使用sed,您可以通过给出一个数字来指定要替换的匹配项。因此,您可以使用:

sed -e 's/([[:digit:]])/./g' -e 's/\.$//' -e 's/\.//4'
这假设日志中的行是可预测的,足以确保要删除的点是IP地址后面的第一个点