除了Vim中的特定模式之外,你如何删除所有内容?

时间:2011-10-12 18:27:48

标签: vim

我有一个XML文件,我只关心某个元素的size属性。 首先我用

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

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

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

我想删除除“size”之外的所有内容。 我的计划是使用替换来摆脱不匹配'size =“[digit]”'的所有内容,删除字符串'size'和引号,但我无法弄清楚如何替换字符串的否定。< / p>

知道怎么做,或想出更好的方法来实现这个目标吗?基本上我想最终得到一个每行一个数字(大小)的文件。

2 个答案:

答案 0 :(得分:6)

您可以使用匹配的组:

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

这将仅size="N"替换包含N的行,而不会触及其他行。

说明:这将查找包含一些随机字符的行,然后是链size=",然后是数字,然后是",然后是一些更随机的字符,然后是行的结尾。我现在所做的是将数字包裹在(转义)括号中。这创造了一个群体。在search-and-replace命令的第二部分中,我基本上说“我想用第一组的内容替换整行”(简称\1)。

答案 1 :(得分:2)

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

第一个命令(直到|删除与size="<SOMEDIGIT(S)>"模式不匹配的每一行,第二个命令%s...删除大小attr "之前和之后的所有内容(并且"也将被删除。)

HTH