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

时间:2013-09-10 12:32:04

标签: 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:15:57 0B58 PACKET  000000000ED9F540 UDP Rcv 10.35.83.5      c664   Q [0001   D   NOERROR] A      (3)crl(9)microsoft(3)com(0)

有没有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

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

sed s/([0-9])//  ## no /g at the end!

现在按照您之前的步骤做sed s/([0-9])/./gsed s/.$//g。这将起作用,因为您已经假设所有([0-9])仅出现在网址中。

为清楚起见,您可以合并这些sed操作,例如:

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

答案 1 :(得分:0)

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

sed -e 's/([[:digit:]])/./g' -e 's/\.$//' -e 's/\.//4'

这假设日志中的行足够可预测,以确保您要删除的点是IP地址后的第一个点。

相关问题