在vim中删除多行不同长度的后缀

时间:2014-03-26 08:01:35

标签: vim

在vim的帮助下我想转换这个文件

aaaaaaaaaaaa.xxx()
bbbbbbbbbbbbbbb.xxx()
cc.xxx()
ddddddddd.xxx()
eeeeeee.xxx()
fffff.xxx()

进入此文件

aaaaaaaaaaaa
bbbbbbbbbbbbbbb
cc
ddddddddd
eeeeeee
fffff

这样的搜索/替换命令
:%s/.xxx()//g

会做这个工作。我想知道是否有更好更优雅的选择?

5 个答案:

答案 0 :(得分:4)

此替换只是偶然的:.匹配任何字符,因此似乎适用于您的情况,因为..匹配,就好像你实际上是故意这样做的。您必须转义.以匹配常规.

:%s/\.xxx()//g

由于每行只有一次搜索模式,您可以放心地省略g标记。

:%s/\.xxx()//

你甚至可以省略最后两个斜杠:

:%s/\.xxx()

如果那不优雅,我不知道是什么。

但是,总有另一种方式。像这样的东西,例如:

:%norm $F.D

答案 1 :(得分:1)

VIM进行字符串替换的过程更好,但我有另一种解决方案来替换它。

如果你想要替换多个文件,它很有用。

#grep -rl "string1" * -R | xargs sed -i 's/string1/string2/g'

上面的命令是'grep'和'sed'

的组合

grep:命令将搜索“string1”并返回找到string1的文件名

sed:会将“string1”替换为“string2”

string1:旧字符串 string2:新字符串

希望它对多文件串替换更有用,更快。

参考链接:http://tarunlinux.blogspot.in/2014/02/linux-replace-string-in-multiple-files.html

答案 2 :(得分:1)

如果文本行中没有额外的点,您可以尝试

%s/\..*$//g

答案 3 :(得分:1)

也许使用:normal

:%norm f.D

有关详细信息,请参阅:

:h :norm

答案 4 :(得分:0)

我会这样做:

qaf.Dj0q@6@a 

它比你的略短,如果你的文件有很多行需要更改,可能会慢一些。我更通用:你可以用宏来应用你能想到的几乎任何东西。