如何使用Python审查文件中的IP地址?

时间:2010-05-07 08:02:08

标签: python regex

我有一个日志文件,其中包含一些具有相对IP地址的Whois条目,我想要审查: 81.190.123.123中的81.190.xxx.xxx

有没有办法进行这样的转换并重写文件内容而不修改其余内容?

感谢您的帮助!

3 个答案:

答案 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参数来防止临时文件被自动删除。

如果输入很重要,则需要注意处理异常以防止输入在发生错误时丢失。