在 Bash 脚本中用 sed 替换文件中的版本号
Replace version number in file with sed in Bash script
在我的 project.pro
文件中我有:
DEFINES += VERSION=\\"1.13.1\\"
我想用 Bash 脚本中的新版本替换当前版本号:
VERSION_MAJOR=1
VERSION_MINOR=14
VERSION_PATCH=1
sed -i "s/\([0-9]+.[0-9]+.[0-9]+\)/${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}/" project.pro
为什么不起作用?
到目前为止,我要么根本没有找到匹配项,要么得到了一些奇怪的只替换最后一个数字的替换项。
您可以使用这个 sed
:
sed -i.bak -E "s/[0-9]+\.[0-9]+\.[0-9]+/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH/" project.pro
您尝试中的几个问题:
- 没有扩展的正则表达式模式 (
-E
),+
不能未转义使用。
- 点需要在正则表达式中转义
- 无需使用捕获组和反向引用
</code>。</li>
</ul>
<p>PS: <code>.bak
是备份文件的扩展名,这样你可以得到原始文件,以防替换错误。
在我的 project.pro
文件中我有:
DEFINES += VERSION=\\"1.13.1\\"
我想用 Bash 脚本中的新版本替换当前版本号:
VERSION_MAJOR=1
VERSION_MINOR=14
VERSION_PATCH=1
sed -i "s/\([0-9]+.[0-9]+.[0-9]+\)/${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}/" project.pro
为什么不起作用?
到目前为止,我要么根本没有找到匹配项,要么得到了一些奇怪的只替换最后一个数字的替换项。
您可以使用这个 sed
:
sed -i.bak -E "s/[0-9]+\.[0-9]+\.[0-9]+/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH/" project.pro
您尝试中的几个问题:
- 没有扩展的正则表达式模式 (
-E
),+
不能未转义使用。 - 点需要在正则表达式中转义
- 无需使用捕获组和反向引用
</code>。</li> </ul> <p>PS: <code>.bak
是备份文件的扩展名,这样你可以得到原始文件,以防替换错误。