出于安全原因,我需要在日志文件中隐藏 IP 地址。IP 地址是版本 4 和 6。如何隐藏地址,
IPv4 示例123.4.32.16
被替换为x.x.x.x
IPv6
示例232e:23o5:te43:5423:5433:0000:ef09:23ff
被替换x:x:x:x:x:x:x:x
?
是否可以使用单个sed
命令来执行此操作?
问问题
1485 次
4 回答
2
您可能需要为此使用find和sed。
假设您的日志具有扩展名“.log”:
find /path/to/logs -type f -name '*.log' -exec \
sed -i -e 's,[0-9]\+\(\.[0-9]\+\)\{3\},x.x.x.x,g' \
-e 's,[0-9a-f]\+\(:[0-9a-f]\+\)\{7\},x:x:x:x:x:x:x:x,gi' {} \;
这是如何运作的?
首先,我们要求find从/path/to/logs开始递归查找扩展名为.log的文件。-type f告诉 find 我们不要查找常规文件。
对于每个文件,它将执行sed。-i参数告诉 sed 你想就地编辑文件。(查看http://www.grymoire.com/Unix/Sed.html)
于 2013-01-10T00:56:57.523 回答
0
我用这个:
find . -name "*.log" -exec grep -izl PATTERN {} \; | xargs perl -i.orig -e -n 's/PATTERN/REPLACEMENT/g'
您需要插入您的 PATTERN 并将 *.log 替换为其他内容,具体取决于您的日志文件的名称。
-i.orig 备份被替换为 .orig 扩展名的文件。
我发现这比我尝试过的其他事情相对要快。find/grep 组合来识别候选人,然后 perl 来做这项工作。
于 2013-01-10T01:10:39.633 回答
0
一种使用find
and的解决方案perl
:
find /the/directory -type f -exec perl -pi -e '
s/\b\d{1,3}(\.\d{1,3}){3}\b/x.x.x.x/g;
s/\b[a-f\d]{1,4}(:[a-f\d]{1,4}){7}\b/x:x:x:x:x:x:x:x/gi' {} \;
(在一行上输入)
于 2013-01-10T00:58:54.423 回答
0
好吧,首先,您可能应该只修复正在执行日志记录的任何内容,以按照您想要的方式进行记录。
现在,如果您需要返回并修改历史文件,您可以考虑使用sed
sed -e 's/\b(\d{1,3}\.){3}\d{1,3}\b/x.x.x.x/' /path/to/file
sed -e 's/\b([:xdigit:]{4}:){7}[:xdigit:]{4}\b/x.x.x.x.x.x.x.x/' /path/to_file
于 2013-01-10T01:00:30.893 回答