我有一个文件(pac 文件),其中包含某个公司的 IP 地址,我想隐藏其中的每个 IP 地址。我的一个想法是将文件中的每个数字加 1,并将结果数字修改为 256,这样它仍然是一个有效的 IP。
例如 129 将变为 2310 % 256 = 6
有没有一种快速的方法可以使用 vim 来应用这样的更改?这听起来雄心勃勃,但我想我还是会问。这是文件中一个 block 的示例。
if (
isInNet(ip, "111.222.123.234", "255.255.255.224") ||
isInNet(ip, "166.19.10.14", "255.255.255.192") ||
)
{return "DIRECT";}
最佳答案
这是完成所有操作的单个搜索/替换命令:
:s/\d\+/\=substitute(tr(submatch(0), '0123456789', '1234567890'), '0', '10', 'g') % 256/g
(添加您自己的范围,例如,通过在可视模式下选择一个 block 并执行 :'<,'>s
(或整个文件的 :%s
))。
- 我们首先匹配所有数字(即数字序列:
\d\+
)。 - 对于我们旋转数字的每一个:
0
变为1
,1
变为2
,...,9
变为0
(使用tr()
完成)。 - 但是
9
应该变成10
,而不是0
,所以我们应用另一个替换,将所有0
变成10
(使用substitute()
完成)。 - 然后将最终结果取模 256 (
% 256
)。
关于vim - 一次更改文本 block 中的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854568/