2017-08-11 100 views
0

我有这样X1.7_RC02.20170811110948一个字符串,我需要增加RC和下一个点之间只有数字,例如:如何使用sed或awk或grep在两个字符之间增加字符串的数字部分?

原始字符串:

X1.7_RC02.20170811110948 

分步达成的字符串:

X1.7_RC03.20170811110948 

如何增加1(或更多此值)?

+0

的可能的复制[如何找到/替换和增加一个匹配的数字与sed/awk?](https://stackoverflow.com/questi ons/14348432/how-to-find-replace-and-increment-a-matched-number-with-sed-awk) –

+2

@ RavinderSingh13,编辑不应该包含星号'*' – RomanPerekhrest

回答

2

随着GNU sed的

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

考虑到您的数据与示例相同,请尝试以下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}' 
1

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 
4

与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 
+1

谢谢,这解决了我的问题 –

相关问题