文件包含以下行:
[assembly: AssemblyVersion("1.0.0.0")]
将一个版本替换为另一个版本的Bash脚本:
echo "%s/AssemblyVersion\s*\(.*\)/AssemblyVersion(\"$newVersionNumber\")]/g
w
q
" | ex $filePath
问题是为什么这会导致整行都结束,所以我必须在替换字符串的末尾添加]
?
答案 0 :(得分:1)
出现问题是因为.*
将所有字符匹配到行尾,并且\(
和\)
创建了捕获组(与大多数NFA regex引擎,Vim regex在模式中将(
字符与未转义的(
和)
与未转义的)
匹配)。
您可以使用
%s/AssemblyVersion\s*([^()]*)/AssemblyVersion(\"$newVersionNumber\")/g
在这里,AssemblyVersion
将与单词匹配,然后\s*
将与任何0+个空格字符匹配,(
将匹配文字(
,[^()]*
将匹配匹配除(
和)
以外的0+个字符,并且)
将匹配文字)
。
您可能使用的另一个正则表达式替换命令是
:%s/AssemblyVersion\s*(\zs[^()]*\ze)/\"$newVersionNumber\"/g
在这里,AssemblyVersion\s*(
将匹配AssemblyVersion
,0个空格,(
和\zs
将从匹配中忽略该部分,然后是{{1以外的0个字符}}和(
将被匹配,然后)
将检查当前位置右侧是否有\ze)
,但不会将其添加到匹配中。
)
将下一个字符设置为比赛的第一个字符。 \zs
模式之前的任何文本都不会包含在匹配中。
\zs
设置比赛结束。 \ze
模式之后的所有内容都不会成为匹配项。