0

我的 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)

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

4

2 回答 2

1

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

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

现在做sed s/([0-9])/./gsed s/.$//g就像你之前做的那样。这将起作用,因为您已经假设所有内容([0-9])仅发生在 url 中。

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

sed 's/([0-9])//' -e 's/([0-9])/./g' -e 's/.$//g' <filename>
于 2013-09-10T12:35:58.613 回答
0

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

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

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

于 2013-09-10T12:53:04.247 回答