如何使用sed / grep增加文件中的内部版本号?

时间:2012-03-01 11:22:15

标签: regex sed grep versioning

我有档案

version.h中

#define BUILD_NO T("0124")
#define MILESTONE ALPHA

假设我将正确的MILESTONE设置为系统变量

我想只在新的MILESTONE变量(ALPHA,BETA,RC,GOLDEN)与文件相同时才增加内部版本号,否则我只想更新MILESTONE。

我怎样才能使用sed / grep?

1 个答案:

答案 0 :(得分:1)

inc() {
    : ${MILESTONE:?set env var first}
    local fname=${1:?file name is empty}

    if egrep -q "^#define\s+MILESTONE\s+$MILESTONE" "$fname"
    then
        gawk '/^#define BUILD_NO/{sub(/[0-9]+/, sprintf("%04d", gensub("[^0-9]", "", "g", $3)+1))}1' "$fname"
    else
        sed -r "/^(#define MILESTONE).*/s//\\1 $MILESTONE/" "$fname"
    fi
}

TEST

$ MILESTONE=ALPHA
$ inc version.h
#define BUILD_NO T("0125")
#define MILESTONE ALPHA

$ MILESTONE=BETA
$ inc version.h
#define BUILD_NO T("0124")
#define MILESTONE BETA