2011-10-12 47 views
1

我有一个XML文件,我只关心某个元素的大小属性。 首先我用如何删除Vim中的所有特定模式?

global!/<proto name="geninfo"/d 

删除我不关心的所有行。这使我行的一大堆看起来像这样:

<proto name="geninfo" pos="0" showname="General information" size="174"> 

我想删除一切,但对于价值“的大小。” 我的计划是使用替代来摆脱所有不匹配'size =“[digit]”',删除字符串'大小'和引号,但我无法弄清楚如何替换字符串的否定。

任何想法如何做到这一点,或想法更好地实现这一目标?基本上我想结束与每行一个数字(大小)的文件。

回答

6

您可以使用匹配的组:

:%s/^.*size="\([0-9]*\)".*$/\1/ 

这将替换由刚N包含size="N"线,不碰其他线路。

解释:这将寻找一行包含一些随机字符,然后在某处链size=",然后数字,然后",然后一些更多的随机字符,然后行结束。现在我所做的是将数字包含在(转义)括号中。这创建了一个组。在搜索和替换命令的第二部分,我基本上说“我想用第一组的内容替换整行”(称为\1)。

+0

非常明确的解释,谢谢! – Dean

2
:v:size="\d\+":d|%s:.*size="\([^"]\+\)".*:\1: 

的第一个命令(直到|删除每一行不所述size="<SOMEDIGIT(S)>"图案,第二(%s...之前和之后除去一切匹配大小ATTR的"(和"也将被删除)。

HTH

相关问题