【发布时间】:2018-02-12 07:46:35
【问题描述】:
我有一堆包含网络事件的 json 文件。每个事件都包含很多东西,我正在尝试使用sed 进行 IP 地址匿名化(将 IP 地址的最后一段替换为 0)。
简而言之:
如何从json文件中找到"ip":"34.542.3.34"之类的子字符串,并将其转换为"ip":"34.542.3.0"?
尝试:
- 用
\K重置起点
sed -e 's/"ip":"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.\K[0-9]{1,3}/0/g' file.json
这可行,但不幸的是sed 似乎不支持重置起点。
- 消极的后视
sed -e 's/(?<="ip":"[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.)([0-9]{3})/0/g' file.json
这也可以,但负面的lookbehind 似乎不支持非固定宽度的分类。所以[0-9]{1,3} 不受支持,因此这不起作用。
- 匹配组
第三个想法是使用匹配组并做类似的事情
sed -e 's/("ip":"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|([0-9]{1,3})/\1\20/g' file.json
但无法弄清楚这实际上如何与sed 一起工作。
- 分别为每个可能的长度选项编写正则表达式
这可能会起作用,但它会使正则表达式太长且难以阅读。我想找到更方便、更干净的解决方案。
有什么建议吗?
【问题讨论】:
-
您的 json 文件是否具有相同的格式结构(级别)?发布其中一个