【发布时间】:2018-01-19 17:57:15
【问题描述】:
我有一个类似 X1.7_RC02.20170811110948 的字符串,我只需要增加 RC 和下一点之间的数字,例如:
原字符串:
X1.7_RC02.20170811110948
递增字符串:
X1.7_RC03.20170811110948
我怎样才能增加 1(或更多这个值)?
【问题讨论】:
-
@RavinderSingh13,编辑不应包含星号
*
我有一个类似 X1.7_RC02.20170811110948 的字符串,我只需要增加 RC 和下一点之间的数字,例如:
原字符串:
X1.7_RC02.20170811110948
递增字符串:
X1.7_RC03.20170811110948
我怎样才能增加 1(或更多这个值)?
【问题讨论】:
*
与GNUsed
sed -r 's/(.*)(RC0?)([1-9]+)(\..*)/echo "\1\2$((\3+1))\4"/e' <<<X1.7_RC02.20170811110948
【讨论】:
使用 GNU awk 将第三个参数匹配():
$ awk 'match($0,/(.*RC)([^.]+)(.*)/,a){$0=sprintf("%s%02d%s",a[1],a[2]+1,a[3])} 1' file
X1.7_RC03.20170811110948
【讨论】:
awk解决方案:
初始字符串:
s="X1.7_RC02.20170811110948"
awk 'BEGIN{ FS=OFS="_RC"}{ n=substr($2,1,2); print $1,sprintf("%02.f",n+1) substr($2,3)}' <<< $s
输出:
X1.7_RC03.20170811110948
【讨论】:
考虑到您的数据与所示示例相同,然后尝试使用 awk 一次,如果这对您有帮助,请告诉我。
awk '{val=$0;gsub(/.*RC|\..*/,"",val);val=sprintf("%02d",++val);sub(/RC[0-2]+/,"RC"val);print}' Input_file
或者,如果你有一个字符串,那么你可以打印它的值并可以在上面的命令中运行,例如:
echo "$var" | awk '{val=$0;gsub(/.*RC|\..*/,"",val);val=sprintf("%02d",++val);sub(/RC[0-2]+/,"RC"val);print}'
【讨论】: