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

问题描述 投票:0回答:5

我有一个文件:

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

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

0x00004341
0x00004820
...

等等。

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

那么问题是如何做到这一点?

regex vim substitution
5个回答
6
投票

您可以将光标移动到第一个

0x00004341
之前的空间,按CtrlV进入可视模式,G前往缓冲区末尾,E前往缓冲区末尾行,然后按 d 删除。

或者,你可以运行:

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

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
投票

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

:%s/[^ ]*$

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

:%s/ *[^ ]*$

1
投票

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

qq
0
3f <-- space
D
q

然后:

:%norm @q

0
投票

也有效:

:%s/\%>15c.//g

从第 15 列向右删除。

© www.soinside.com 2019 - 2024. All rights reserved.