我有一个日志文件,其中包含一些具有相对IP地址的Whois条目,我想要审查:
81.190.123.123
中的81.190.xxx.xxx
。
有没有办法进行这样的转换并重写文件内容而不修改其余内容?
感谢您的帮助!
答案 0 :(得分:3)
如上所述,您可以使用sed
:
sed -E -e 's/([0-9]+\.[0-9]+)\.[0-9]+\.[0-9]+/\1.xxx.xxx/g'
这使用正则表达式匹配来查找IP地址,并用xxx
替换最后两个八位字节。使用-i
开关,您可以一次完成所有操作:
sed -i.bak -E -e 's/([0-9]+\.[0-9]+)\.[0-9]+\.[0-9]+/\1.xxx.xxx/g' file.txt
答案 1 :(得分:0)
如果Python实际上不是您的要求之一,这也解决了这个问题:
sed -i 's/\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.[0-9]\{1,3\}\.[0-9]\{1,3\}/\1.\2.xxx.xxx/g' mylogfile.log
或Perl,它可以让你摆脱大部分丑陋的反斜杠:
perl -i -pe 's/(\d{1,3})\.(\d{1,3})\.\d{1,3}\.\d{1,3}/$1.$2.xxx.xxx/g' mylogfile.log
但是这没有“内联”标志 -i
。
答案 2 :(得分:0)
如果您确实想使用Python,请使用fileinput模块逐行处理文件或文件。
import fileinput
for line in fileinput.input(["filename"], inplace=1, backup='.bak'):
print processed(line)
fileinput.close()
使用inplace = 1的fileinput将重命名输入文件并从重命名的文件中读取,同时将stdout指向同名的新文件。您可以使用backup参数来防止临时文件被自动删除。
如果输入很重要,则需要注意处理异常以防止输入在发生错误时丢失。