我有一个XML文件,我想对其进行一些更改。例如,我想在Vim中打开文件并运行查找并将memory="..."
属性的所有实例替换为memory="24G"
,但前提是该元素来自name="node-0..."
。这是一个例子:
process name="node-0-3" numaNode="3" memory="14G" logConfig="logback-shards.xml"
process name="node-0-4" numaNode="4" memory="34G" logConfig="logback-shards.xml"
process name="node-0-5" numaNode="5" memory="44G" logConfig="logback-shards.xml"
替换为
process name="node-0-3" numaNode="3" memory="24G" logConfig="logback-shards.xml"
process name="node-0-4" numaNode="4" memory="24G" logConfig="logback-shards.xml"
process name="node-0-5" numaNode="5" memory="24G" logConfig="logback-shards.xml"
我怎么能在Vim中做到这一点?
答案 0 :(得分:8)
:g/node-0/s/memory="\zs\d\{2\}\u\ze"/24G
一步一步:
:g/node-0
使用:global
命令查找包含node-0
s/memory="\zs\d\{2\}\u\ze"/24G
查找memory="
通过\zs
匹配两个数字后跟一个大写字母\d\{2\}\u
实际匹配在此处以\ze
遗漏了收尾双引号。
用24G
(使用更准确的模式编辑以适应提问者的真实用例)
修改强> 的
使用Ingo的评论:
:g/node-0/s/memory="\zs[^"]*\ze"/24G
答案 1 :(得分:1)
如果您不想每次都打开vim,可以使用sed
单行:
sed -i '/node-0/s/memory=".\{3\}/memory="24G"/' foo.txt
或者您可以使用以下命令从vim内部使用相同的命令:
:%!sed '/node-0/s/memory=".\{3\}/memory="24G"/'
答案 2 :(得分:0)
如果所有行的格式相同,您可以尝试:
f 1 //在第一行获得“14G”
Ctrl + v //启动视觉阻止模式
2 j //选择[1] 4G,[3] 4G,[4] 4G
r 2 //替换为2