出于安全原因,我需要隐藏日志文件中的IP地址。 IP地址为版本4和6.如何以下列方式隐藏地址:
由IPv4 123.4.32.16
替换为x.x.x.x
和< br /> IPv6示例232e:23o5:te43:5423:5433:0000:ef09:23ff
被x:x:x:x:x:x:x:x
取代?
是否可以使用单个sed
命令执行此操作?
答案 0 :(得分:2)
您可能希望使用查找和 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' {} \;
这是如何运作的?
首先,我们要求查找以递归方式找到 .log 扩展名从 / path / to / logs 开始的文件。 -type f 告诉我们找不到常规文件。
对于每个文件,它将执行 sed 。 -i 参数告诉sed您要编辑该文件。 (查看http://www.grymoire.com/Unix/Sed.html)
答案 1 :(得分:0)
使用find
和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' {} \;
(在一行输入)
答案 2 :(得分: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
答案 3 :(得分: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 combo来识别候选者,然后perl来完成工作。