如何使用Python检查文件中的IP地址?
我有一个日志文件,其中包含一些Whois条目以及我想要检查的相对IP地址:如何使用Python检查文件中的IP地址?,python,regex,Python,Regex,我有一个日志文件,其中包含一些Whois条目以及我想要检查的相对IP地址: 81.190.123.123中的81.190.xxx.xxx 有没有一种方法可以在不修改其余内容的情况下进行这种转换并重写文件内容 谢谢你的帮助 如果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 或者Per
81.190.123.123
中的81.190.xxx.xxx
有没有一种方法可以在不修改其余内容的情况下进行这种转换并重写文件内容
谢谢你的帮助 如果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
但是它没有“inline”标志
-i
如上所述,您可以使用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
如果您确实想使用Python,那么可以使用fileinput模块逐行处理一个或多个文件
import fileinput
for line in fileinput.input(["filename"], inplace=1, backup='.bak'):
print processed(line)
fileinput.close()
inplace=1的fileinput将重命名输入文件并从重命名的文件中读取,同时将stdout定向到同名的新文件。可以使用backup参数来防止自动删除临时文件
如果输入很重要,则需要小心处理异常,以防止在出现错误时丢失输入。必须使用Python吗?这听起来更像是sed的工作:例如
sed-E-E的/([0-9]+\[0-9]+\[0-9]+\[0-9]+\[0-9]+/\1.xxx.xxx/g'
,这也太棒了!令人惊叹的。非常感谢。Perl确实提供了一个-i
标志。如果你能想到它,Perl就有了。我早该知道,这些解决方案很有效。唯一的一点是,在同一行中,我有另一个字符串,如192.168.xxx.xxx |。。。这种替换会弄乱空间缩进。sed还有其他方法可以用“\t”替换多个空格字符(不是单个空格字符,比如“”)吗?@Julio:当然,只需将其添加到正则表达式和替换文本中即可。