我的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 :(得分:1)
首先用空字符串替换第一次出现的([0-9])
。
sed s/([0-9])// ## no /g at the end!
现在按照您之前的步骤做sed s/([0-9])/./g
和sed 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地址后的第一个点。