Как я могу увеличить числовую часть строки между двумя символами, используя sed, awk или grep?
У меня есть строка вроде X1.7_RC02.20170811110948, и мне нужно увеличить только число между RC и следующей точкой, например:
Исходная строка:
X1.7_RC02.20170811110948
Увеличенная строка:
X1.7_RC03.20170811110948
Как я могу увеличить в 1 (или больше это значение)?
4 ответа
Решение
С GNU
СЕПГ
sed -r 's/(.*)(RC0?)([1-9]+)(\..*)/echo "\1\2$((\3+1))\4"/e' <<<X1.7_RC02.20170811110948
С GNU awk для 3-го аргумента для match():
$ awk 'match($0,/(.*RC)([^.]+)(.*)/,a){$0=sprintf("%s%02d%s",a[1],a[2]+1,a[3])} 1' file
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}'
Решение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