我有一个文件:
mr l 0x19600000 0x00004341
mr l 0x19600004 0x00004820
mr l 0x19600008 0x00003130
mr l 0x1960000c 0x00003920
我想删除每行的最后一部分。所以在上面的例子中我想删除
0x00004341
0x00004820
...
等等。
该文件由大约 4000 行组成,所以我想正则表达式应该是执行此操作的方法。到目前为止,我一直在 vim 中尝试此操作,但没有运气。
那么问题是如何做到这一点?
您可以将光标移动到第一个
0x00004341
之前的空间,按CtrlV进入可视模式,G前往缓冲区末尾,E前往缓冲区末尾行,然后按 d 删除。
或者,你可以运行:
%s/^\(.* \)[^ ]\+$/\1/g
这是一种简单的方法:
:%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)
如果您只想删除最后一部分:
:%s/[^ ]*$
如果您想删除最后一部分及其前导空格:
:%s/ *[^ ]*$
假设所有的线看起来都一样,你可以用宏来做到:
qq
0
3f <-- space
D
q
然后:
:%norm @q
也有效:
:%s/\%>15c.//g
从第 15 列向右删除。