0

我有一个文件:

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

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

0x00004341
0x00004820
...

等等。

该文件由大约 4000 行组成,所以我想一个正则表达式应该是这样做的方法。到目前为止,我一直在 vim 中尝试这个,但没有运气。

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

4

4 回答 4

6

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

或者,您可以运行:

%s/^\(.* \)[^ ]\+$/\1/g
于 2013-06-27T08:35:45.397 回答
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)
于 2013-06-27T09:04:53.853 回答
2

如果您只想删除最后一部分:

:%s/[^ ]*$

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

:%s/ *[^ ]*$
于 2013-06-27T08:44:09.843 回答
1

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

qq
0
3f <-- space
D
q

然后:

:%norm @q
于 2013-06-27T08:46:44.700 回答