Shell-Script

在 bash 中增加內部版本號

  • January 28, 2020

我正在嘗試使用命令行將內部版本號增加 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 上的幾乎相同)

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;

另一個答案,僅使用awk. 這假設您key <space> = <space> value;始終遵守以下語法:

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

這會將所有行中的第三個欄位增加 1,CURRENT_PROJECT_NUMBER但否則會“按原樣”列印所有行(這是1程式碼塊後面的含義)。

請注意,我不確定“以數字開頭的任何內容遞增”語法是否可移植,因此可以確定(並且僅稍長一點),我們可以在遞增之前從欄位 3 中刪除尾隨分號:

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

引用自:https://unix.stackexchange.com/questions/564559