2015-12-17 144 views
1

我可以使用eq替换==(但我不确定如何在==之后抓住字符串,并将其放回替换为a)。有没有人有办法解决吗?如何将VSS中的==字符串更改为eq(字符串)?

我正在使用:%s/== /eq(/g,但我需要在现有字符串的末尾获取)。

我试过:%s/== .*/eq(&)/g但是当我运行它的时候,我意识到这也将“==”带入了我想要摆脱的替换字符串中。

我想我希望有一种方法来捕获未知的字符串,并将该确切的字符串放回到替换行。类似于:%s/== .*/eq(.*)/g,其中。*是未知字符串。第一部分工作并抓取字符串,但不知道如何将其放回替换线上。特别是因为我不知道字符串可能有多少个字符/单词。

SOLUTION::%s/== \(.*\)/eq(\1)/

+0

我不知道sed,但用Perl它会像''echo“foo == string”| perl -pe's/==(。*)/ eq($ 1)/ g'''。前段时间我从Sed切换到Perl,因为我认为它没有完整的正则表达式的能力。如果我记得正确的话,它有负面/积极的前瞻和后顾之忧。哦,对不起,错过了VIM部分的交易:( – tiblu

+0

因此,当在VIM中使用Perl时,它就像'':%!perl -pe'/ ==(。*)/ eq($ 1)/ g'' ' – tiblu

+0

谢谢。我曾经写过很多perl,但是我从来没有尝试过在VIM里面使用它,我可能不得不考虑一下, – general

回答

2

您需要捕获文本

:%s/== \(.*\)/eq(\1)/ 

你不需要g标志,因为“串“延伸到线的末尾,因此只会有一场比赛。

+0

g是因为我正在将它应用到整个文档中,我没有意识到\ 1拾取了整个字符串,我会试试这个,谢谢 – general

+0

'%'应用于每一行,'g'是用于一行内的所有匹配项的,'\ 1'被替换为模式中第一组'\(... \)'中的文本 –

+0

gotcha,刚刚计算出g和%。我已经使用SED了一段时间, – general

1

使用反向引用应该工作:

:%s/== \(.*\)/eq(\1)/g 
+0

谢谢,我找不出或找到反向引用是如何工作的 – general

相关问题