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スクリプトの経験がなく、数字に1つを追加する方法もわかりません。 (私は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

これにより、で始まるすべての行で3番目のフィールドが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

関連情報