我正在尝试使用命令行将内部版本号增加 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