当模式具有波形时,正则表达式在vim中递归替换

时间:2016-03-15 03:50:08

标签: regex vim

我的初始档案是

192.168.210.12
192.168.210.13
192.168.210.14
192.168.210.15
192.168.210.16
192.168.210.17
192.168.210.18
192.168.210.18

替换模式为%s/\(192.168.210.[0-9]\+\)/\"ssh\ myuser@\1\ -i\ ~\/Documents\/my_key\"/g

运行上面的命令后,我得到了以下文件。

"ssh myuser@192.168.210.12 -i /Documents/my_key"
"ssh myuser@192.168.210.13 -i /Documents/my_key"
"ssh myuser@192.168.210.14 -i /Documents/my_key"
"ssh myuser@192.168.210.15 -i /Documents/my_key"
"ssh myuser@192.168.210.16 -i /Documents/my_key"
"ssh myuser@192.168.210.17 -i /Documents/my_key"
"ssh myuser@192.168.210.18 -i /Documents/my_key"
"ssh myuser@192.168.210.18 -i /Documents/my_key"

在致电:u然后同样替换之后,我得到以下内容:

"ssh myuser@192.168.210.12 -i "ssh myuser@192.168.210.12 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.13 -i "ssh myuser@192.168.210.13 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.14 -i "ssh myuser@192.168.210.14 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.15 -i "ssh myuser@192.168.210.15 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.16 -i "ssh myuser@192.168.210.16 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.17 -i "ssh myuser@192.168.210.17 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.18 -i "ssh myuser@192.168.210.18 -i /Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.18 -i "ssh myuser@192.168.210.18 -i /Documents/my_key"/Documents/my_key"

再次,我打电话:你和替换,它提供以下输出

"ssh myuser@192.168.210.12 -i "ssh myuser@192.168.210.12 -i "ssh myuser@192.168.210.12 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.13 -i "ssh myuser@192.168.210.13 -i "ssh myuser@192.168.210.13 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.14 -i "ssh myuser@192.168.210.14 -i "ssh myuser@192.168.210.14 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.15 -i "ssh myuser@192.168.210.15 -i "ssh myuser@192.168.210.15 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.16 -i "ssh myuser@192.168.210.16 -i "ssh myuser@192.168.210.16 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.17 -i "ssh myuser@192.168.210.17 -i "ssh myuser@192.168.210.17 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.18 -i "ssh myuser@192.168.210.18 -i "ssh myuser@192.168.210.18 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"
"ssh myuser@192.168.210.18 -i "ssh myuser@192.168.210.18 -i "ssh myuser@192.168.210.18 -i /Documents/my_key"/Documents/my_key"/Documents/my_key"

但是,当我从模式中删除~时(即使用此%s/\(192.168.210.[0-9]\+\)/\"ssh\ myuser@\1\ -i\ \/Documents\/my_key\"/g),它会表现出预期效果。

~上这种不寻常的替换行为的原因是什么。

1 个答案:

答案 0 :(得分:1)

来自:h :s

magic   nomagic   action   
  ~   \~      replaced with the {string} of the previous substitute  s~
 \~    ~      replaced with ~                                         s/\~

应用于您的替换表达式,~将被替换为先前替换的字符串。