一个常见的CI构建类型问题,我有一个标题,其中包含我想在构建之前递增的版本号。
所以test.h
#define VERSION_PROJECT_MAJOR 01
#define VERSION_PROJECT_MINOR 69
#define VERSION_VENDOR 2
需要为次要版本获得6A。
环境是使用gnu utils的DOS / WIN,所以我认为awk是要走的路,但我不能完全旋转它。构建系统所具有的版本并不适用,但我可以接受它。
到目前为止,我有一个相当不错的单行;
awk "/#define VERSION_PROJECT_MINOR/{$0=$1 \" \" $2 \" \" (strtonum(\"0x\" $3)+1)}1;" test.h
这将版本号设置为106,如何输出hex ???
答案 0 :(得分:4)
使用GNU awk' s non-decimal-data
flag:
只需转换为十进制,执行添加,然后转换回十六进制:
awk --non-decimal-data '/MINOR/ {
$3=sprintf("%d", "0x"$3); $3=sprintf("%x",$3+1)
}
1' file
使用您的文件:
$ awk --non-decimal-data '/MINOR/ {$3=sprintf("%d", "0x"$3); $3=sprintf("%x",$3+1)}1' file
#define VERSION_PROJECT_MAJOR 01
#define VERSION_PROJECT_MINOR 6a
#define VERSION_VENDOR 2
这使用%x
中的printf
返回hexa的十进制值这一事实。
$ awk --non-decimal-data 'BEGIN{printf "%d\n", 0x69}'
105