出于安全原因,我需要隐藏日志文件中的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
命令执行此操作?用sed替换目录中的多个文件的文本
1
A
回答
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扩展从/路径开始的文件/到/日志。 -type f告诉我们我们不想找到常规文件。
对于每个文件,它将执行sed。 -i参数告诉sed你想编辑文件。 (查看http://www.grymoire.com/Unix/Sed.html)解决方案使用
find
和perl
0
一:
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' {} \;
(在一行中键入)
0
0
我用这个:
find . -name "*.log" -exec grep -izl PATTERN {} \; | xargs perl -i.orig -e -n 's/PATTERN/REPLACEMENT/g'
你想要插入你的模式( s),并根据您的日志文件的名称将* .log替换为其他内容。
-i.orig备份替换为.orig扩展名的文件。
我发现这比我尝试的其他东西相对更快。找到/ grep组合来识别候选人,然后perl来完成这项工作。
相关问题
- 1. 替换文本,用sed的
- 2. 在bash脚本中使用sed替换文件中的文本
- 3. sed文本替换
- 4. sed文本替换
- 5. sed替换文本
- 6. 使用sed替换多个文件中的多行
- 7. 用sed替换文本
- 8. 替换文本使用sed
- 9. 使用sed替换文本
- 10. SED替换文本的文本变量
- 11. 用于替换多个目录中的图像文件的基本脚本
- 12. 从文本文件中的目录替换文件名
- 13. 两个标签替换文本 - sed的
- 14. 如何用sed替换同一个文件中的很多行?
- 15. 如何使用sed替换文件中的多个变量?
- 16. 使用sed替换多个文件中的字符串
- 17. Ansible替换目录中的多个文件中的代码
- 18. 使用替换文件中找到的文字,多次SED
- 19. sed中的多个替换
- 20. 使用sed替换文本文件中的行
- 21. 使用SED的Java属性中替换文本文件
- 22. 使用sed替换文本文件中的“localhost”
- 23. 使用sed来查找和替换smb.conf文件中的文本
- 24. 使用sed替换HTML文件中的变量文本
- 25. 使用sed替换文本文件中的第一行
- 26. 使用sed或awk替换另一个文件的文本文件的行
- 27. Bash - sed替换文本
- 28. 替换文本与SED
- 29. sed:替换一段文本
- 30. sed替换为大文本
是否所有的IPv6地址都是扩展形式?如果不是,这将是一个挑战......(你想使用'sed','grep'只做正则匹配) – fge
啊,我明白了。是的,IPv6地址是扩展形式。这里的文章说,我们可以使用grep来处理这种情况:http:// vasir。net/blog/ubuntu/replace_string_in_multiple_files/ –
然而,你会看到'grep'被传送到'sed'; – fge