如何使用 sed 或 awk 或 grep 在两个字符之间递增字符串的数字部分?

How can I increment a numerical part of a string between two characters using sed or awk or grep?

我有一个像 X1.7_RC02.20170811110948 这样的字符串,我只需要增加 RC 和下一点,例子:

原始字符串:

X1.7_RC02.20170811110948

增加的字符串:

X1.7_RC03.20170811110948

我怎样才能增加 1(或更多这个值)?

考虑到您的数据与所示示例相同,那么也尝试使用 awk 一次,如果这对您有帮助,请告诉我。

awk '{val=[=10=];gsub(/.*RC|\..*/,"",val);val=sprintf("%02d",++val);sub(/RC[0-2]+/,"RC"val);print}'  Input_file

或者,如果您有一个字符串,那么您可以打印它的值,并且可以 运行 以上命令,例如:

echo "$var" | awk '{val=[=11=];gsub(/.*RC|\..*/,"",val);val=sprintf("%02d",++val);sub(/RC[0-2]+/,"RC"val);print}' 

awk 解决办法:

初始字符串:

s="X1.7_RC02.20170811110948"

awk 'BEGIN{ FS=OFS="_RC"}{ n=substr(,1,2); print ,sprintf("%02.f",n+1) substr(,3)}' <<< $s

输出:

X1.7_RC03.20170811110948

用 GNU awk 匹配第三个参数():

$ awk 'match([=10=],/(.*RC)([^.]+)(.*)/,a){[=10=]=sprintf("%s%02d%s",a[1],a[2]+1,a[3])} 1' file
X1.7_RC03.20170811110948

GNU sed

sed -r 's/(.*)(RC0?)([1-9]+)(\..*)/echo "$((+1))"/e' <<<X1.7_RC02.20170811110948