使用 sed 替换文件中的版本号

Chr*_*iss 0 sed regular-expression

我需要更新文件中的版本号。在文件中有一行包含这样的语义版本号:

foo.bar.blah.blub#10.6.1
Run Code Online (Sandbox Code Playgroud)

现在我想寻找前缀“blah.blub”来识别正确的行并替换版本号。

我得到以下显然不起作用的信息:

sed -i -e 's/^blah.blub#\d\.\d\.\d$/blah.blub'${VERSION}/$ README.MD

Run Code Online (Sandbox Code Playgroud)

ter*_*don 5

默认情况下,Sed 使用基本正则表达式,并且大多数实现(包括您似乎正在使用的 GNU 实现)不理解\d. 此外,您的行不以 开头blah.blub,因此^意味着它永远不会匹配。以及其他各种问题。

不过,这应该可以满足您的需求:

sed -i -E "/blah\.blub#/s/#.*/#$VERSION/" README.MD
Run Code Online (Sandbox Code Playgroud)

这将#用 的内容替换 a 之后的文本$VERSION,但前提是该行包含blah.blub. 现在,这是否足够具体来处理您的数据,我不知道,因为您只向我们展示了这一行。