我希望为比通常通过 sed 查找/替换稍微复杂的东西编写一个 bash 脚本。我有一本名为 bash Cookbook 的书,我一直试图从中获得一些灵感,但我并没有走得太远。
基本上我正在尝试编写一个脚本来自动更新一堆 maven pom.xml 文件中的版本号。这是我正在查看的一般设置:
<!-- TEMPLATE:BEGIN
<version>@@VERSION@@</version>
-->
<version>1.0.0</version>
<!-- TEMPLATE:END -->
运行脚本(使用新版本号 1.0.1)后,我希望文件改为读取:
<!-- TEMPLATE:BEGIN
<version>@@VERSION@@</version>
-->
<version>1.0.1</version>
<!-- TEMPLATE:END -->
所以这将在实际发布的 pom 文件中,1.0.0 是当前版本(我试图用 1.0.1 或其他东西替换它)。显然版本号会发生变化,所以没有一个很好的方法来查找/替换(因为你想要找到的东西是可变的)。我希望能够编写一个 bash 脚本
- 将@@VERSION@@ 替换为实际的版本号
- 删除当前版本行
- 在 TEMPLATE:END 之前的行上写入更新的版本行(同时在文件中保留 @@VERSION@@ - 可能通过将模板写入临时文件,进行替换,然后返回来做到这一点?)
我可以使用 ant 脚本 a la 做一些这样的事情(写出一个新文件,做替换)
<replace file="pom.xml">
<replacefilter
token="@@VERSION@@"
value="${version}"/>
</replace>
但我不确定a.)删除旧版本的行或b.)告诉它在正确的位置复制新行的最佳方法是什么。任何人都知道如何做到这一点或有任何建议?