问题
我有一个如下所示的文件:
word= something something aaa something aaa
word2= something something aaa something aaa
word3= something something aaa something aaa
请注意,“某物”不一定到处都是同一个词。此外,“something”和“aaa”不一定用空格分隔。
问题
我想用 vim 中该行的第一个单词替换所有出现的“aaa”。输出应如下所示:
word= something something word something word
word2= something something word2 something word2
word3= something something word3 something word3
到目前为止我主要研究了vim的搜索和替换语法,因为这是我最熟悉的。
感谢您的帮助!
最佳答案
对于完全使用正则表达式的解决方案,我建议这样做:
:%s/\v%(^([^=]+).*)@<=aaa/\1/g
这适用于宽度为零的后视 ( \@<=
)。 \v
在
正则表达式的开头只是为了通过启用“very
magic”模式(参见 :h \v
)。表达式本身:
%(^([^=]+).*)@<=aaa
后面的观察与第一组一起进行。 %()
形式是非
捕获组(更快一点,并且不会算作数组中的编号之一)
代换)。内部组捕获任何不等号的东西,并且
在该组之后,任何内容都会匹配( .*
)。这一切都不算
在正则表达式中,真正匹配的是 aaa
,然而这只是
如果前面有这些条件则匹配。当然前面是
他们,但目标是捕获第一个单词。
这个aaa
然后被捕获的组替换,多次
一行( g
标志)和所有行( %
范围)。
关于vim:用行的第一个单词替换单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455967/