我使用sed自动更新我的doxyfile中的版本:
sed -i -e "s/PROJECT_NUMBER.([ ]{2,}=.*)/PROJECT_NUMBER = $$VERSION/g" ".doxygen"
使用$$VERSION = 1.1.0
(例如)
并作为来源:
PROJECT_NUMBER = 1.0.10
但它会生成名为.doxygen
的{{1}}的副本,并且不会更改该行。我测试了我的正则表达式here。
我不明白什么是错的,因为它可以使用我的plist文件:
.doxygen-e
答案 0 :(得分:1)
这里有几个问题:
您需要在$FOO
中将shell变量$$FOO
称为Makefile
。如果您尝试在bash
或任何其他shell中执行此操作,请说:
$$FOO
将导致当前进程的数字PID与FOO
连接,例如如果当前进程的PID是1234
,那么你得到:
1234FOO
那就是说,你的正则表达式似乎错误不止一次。你说:
PROJECT_NUMBER.([ ]{2,}=.*)
由于您不使用sed
的任何可以使用扩展正则表达式的选项,这将匹配字符串PROJECT_NUMBER
,后跟一个字符,然后是按(
,后跟2个或多个空格,=
符号,直到遇到字符串中的最后 )
为止。
由于你没有提到任何关于文件中的行是什么样子的东西,我假设它的形式是:
PROJECT_NUMBER = 42.42
以下内容可能适合您:
sed 's/\(PROJECT_NUMBER[ ]*=[ ]*\)[^ ]*/\1$VERSION/' filename
如果在Makefile中调用,则需要将$
加倍。