我有一个文件(pac文件),其中包含某个公司的IP地址,并希望隐藏其中的每个IP地址。我的一个想法是在文件中的每个数字上加1,然后用256修改结果数字,这样它仍然是一个有效的IP。
例如,129将变为2310 % 256 = 6
是否有使用vim快速应用此类更改的方法?这听起来雄心勃勃,但我还以为我还在问。以下是文件中一个块的示例。
if (
isInNet(ip, "111.222.123.234", "255.255.255.224") ||
isInNet(ip, "166.19.10.14", "255.255.255.192") ||
)
{return "DIRECT";}
答案 0 :(得分:4)
这是一个完成所有操作的单个搜索/替换命令:
:s/\d\+/\=substitute(tr(submatch(0), '0123456789', '1234567890'), '0', '10', 'g') % 256/g
(添加您自己的范围,例如,在可视模式下选择一个块并对整个文件执行:'<,'>s
(或:%s
)。)
\d\+
)。0
变为1
,1
变为2
,......,9
变为0
(使用tr()
完成)。9
应该成为10
,而不是0
,因此我们应用另一个替换,将所有0
转换为10
(使用{{完成1}})。substitute()
)模数取得最终结果。答案 1 :(得分:3)
您可以使用Vim鲜为人知的“表达式寄存器”:h CTRL-R_=
在插入模式下,如果您键入 ctrl + r = ,则会打开一个提示,您可以在此处进行数学运算。
所以对于这一行:
isInNet(ip, "111.222.123.234", "255.255.255.224") ||
这种模式可以做到(光标位于第一个1
)
% 256
并按 Enter 您应该能够对此进行宏观化,并在您需要的地方添加+1
或括号。
答案 2 :(得分:1)
要获取随机IP,我建议您使用外部程序。例如。 bash或python:
:%s/\d\+/\=system('bash -c "echo -ne $(( ( RANDOM % 256 ) ))"')/
:%s/\d\+/\=system('python -c "import random,sys;sys.stdout.write(str(random.randint(0,255)))"')/
这是一个更具体的更长的oneliner,只匹配ipv4地址并生成整个IP:
:%s/\v(\d{1,3})(\.\d{1,3}){3}/\=system('python -c "import random,sys;sys.stdout.write(''.''.join(str(random.randint(0,255)) for i in range(4)))"')/