如何使用 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
我有一个像 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