如何用Python屏蔽文件中的IP地址?

5 投票
4 回答
501 浏览
提问于 2025-04-15 22:27

我有一个日志文件,里面有一些Whois条目,包含了一些IP地址。我想把这些IP地址处理一下,比如把81.190.123.123变成81.190.xxx.xxx,这样就不会显示具体的地址了。

请问有没有办法做到这样的转换,并且在不改变其他内容的情况下重写文件呢?

谢谢大家的帮助!

4 个回答

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

0

如果你想用Python的话,可以使用fileinput模块来逐行处理一个文件或多个文件。

import fileinput
for line in fileinput.input(["filename"], inplace=1, backup='.bak'):
    print processed(line)
fileinput.close()

当你使用fileinput并设置inplace=1时,它会重命名输入文件,并从这个重命名后的文件中读取内容,同时把输出结果写入一个同名的新文件。你还可以用backup参数来防止临时文件被自动删除。

如果输入的数据很重要,你需要特别小心处理错误,以免在出错时丢失输入的数据。

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

撰写回答