使用正则表达式删除vim中的文本块

时间:2013-06-27 08:34:00

标签: regex vim substitution

我有一个文件:

mr l 0x19600000 0x00004341
mr l 0x19600004 0x00004820
mr l 0x19600008 0x00003130
mr l 0x1960000c 0x00003920

我想删除每一行的最后一部分。所以在我上面的例子中我想删除

0x00004341
0x00004820
...

等等。

该文件包含大约4000行,所以我想正则表达式应该是这样做的。到目前为止,我已经在vim中尝试了这一点而没有运气。

所以问题是如何做到这一点?

4 个答案:

答案 0 :(得分:6)

您可以将光标移动到第一个0x00004341之前的空格,按 Ctrl V 进入可视模式, G 要去缓冲区的末尾, E 要转到行的末尾,然后 d 要删除。

或者,您可以运行:

%s/^\(.* \)[^ ]\+$/\1/g

答案 1 :(得分:4)

这是一个简单的方法:

:%s/ [^ ]\+$//g

以下是一些解释:

  %      for the whole document
  s      substitute
  /      begin substitution pattern
         a space
  [^ ]   anything but a space
  \+     one or more of the previous pattern (must escape + with \)
  $      end of line
  /      end substitution pattern/begin replacement pattern
  /      end  replacement pattern (i.e. replace with empty string)
  g      perform multiple times per line (does nothing here)

答案 2 :(得分:2)

如果你想删除最后一部分:

:%s/[^ ]*$

如果你想删除最后一个部分及其前导空格:

:%s/ *[^ ]*$

答案 3 :(得分:1)

假设所有的行看起来都一样,你可以用宏来做:

qq
0
3f <-- space
D
q

然后:

:%norm @q