2

出于安全原因,我需要在日志文件中隐藏 IP 地址。IP 地址是版本 4 和 6。如何隐藏地址,

IPv4 示例123.4.32.16被替换为x.x.x.xIPv6

示例232e:23o5:te43:5423:5433:0000:ef09:23ff被替换x:x:x:x:x:x:x:x

是否可以使用单个sed命令来执行此操作?

4

4 回答 4

2

您可能需要为此使用findsed

假设您的日志具有扩展名“.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' {} \;

这是如何运作的?

  1. 首先,我们要求find/path/to/logs开始递归查找扩展名为.log的文件。-type f告诉 find 我们不要查找常规文件。

  2. 对于每个文件,它将执行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

一种使用findand的解决方案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 回答