增加 bash 中的内部版本号

增加 bash 中的内部版本号

我正在尝试使用命令行将内部版本号增加 1。

这是我的测试文件的内容:

SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;

我想要获得的结果如下:

SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;

我正在尝试使用类似的东西:

sed -i -E "s/CURRENT_PROJECT_VERSION = (\d+);/CURRENT_PROJECT_VERSION = \1~;/" test.txt

我没有 bash 脚本经验,也不知道如何将数字加一。 (我使用的是 MacOS,但 sed 命令与 Linux 上几乎相同)

答案1

awk -F '= ' '/CURRENT_PROJECT_VERSION/{$2=$2+1";"}1' OFS='= ' input > output

测试

cat file
SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;

awk -F '= ' '/CURRENT_PROJECT_VERSION/{$2=$2+1";"}1' OFS='= ' file
SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;

答案2

另一个答案,仅使用awk.这假设您自始至终都遵守key <space> = <space> value;语法:

awk '$1 == "CURRENT_PROJECT_VERSION" {$3=($3+1)";"}1' testfile.txt

这会将以 开头的所有行中的第三个字段增加 1,否则将“按原样”打印所有行(这是代码块后面CURRENT_PROJECT_NUMBER的含义)。1

请注意,我不确定“增加任何东西开始with a number" 语法是可移植的,所以可以肯定的是(而且只是稍微长一点),我们可以在递增之前从字段 3 中删除尾随分号:

awk '$1 == "CURRENT_PROJECT_VERSION" {sub(";","",$3); $3=($3+1)";"}1' testfile.txt

答案3

使用 sed 和 bash:

FILE="test.txt"
REGEX="\(CURRENT_PROJECT_VERSION *= *\)\([0-9]\+\);"

version=$(sed -ne "s/${REGEX}/\2/p" ${FILE} | head -1)
((version++))

sed -ie "s/${REGEX}/\1${version};/" ${FILE}

答案4

使用perl,就地修改文件:

perl -pi -e 's/\bCURRENT_PROJECT_VERSION\s*=\s*\K-?\d+/$& + 1/ge' test.txt

相关内容