Как я могу увеличить число в части строки с помощью команды sed? и вход будет изменен динамически - PullRequest
0 голосов
/ 21 октября 2019

Я бы хотел увеличить подстроку строки version="01.00.00.041" на 1, используя sed. Например: version="01.00.00.041" до version="01.00.00.042", и оно должно быть динамическим, а не статическим. Я имею в виду, что номер версии будет изменяться каждый раз, когда я собираюсь, поэтому это должен быть ввод sed, а последняя 1 цифра должна быть увеличена.

Редактировать: (взято из комментария)
Я пробовал, как показано ниже:

sed -i "s/version.*/version=\"${print $ "."$ "."$ "."$ +1}}\">/g" descriptor.xml

Ответы [ 2 ]

1 голос
/ 21 октября 2019

С perl:

$ echo 'version="01.00.00.041"' | perl -pe 's/(\d+)(?=")/sprintf("%0*d", length($1), $1+1)/e'
version="01.00.00.042"

Увеличивает последний набор цифр перед кавычкой, с дополнением 0 в зависимости от длины поля вместо номера с жестким кодом.

1 голос
/ 21 октября 2019

РЕДАКТИРОВАТЬ: Поскольку ОП добавил информацию, поэтому добавив код в соответствии с информацией.

awk -v version="version=\"01.00.00.42\"" 'BEGIN{FS=OFS=".";s1="\""} match($0,version) && ++count==2{$NF+=1;$NF=$NF s1} 1' Input_file


Вотрабочий раствор Добавлен OP:

grep version descriptor.xml | tail -n 1 | awk -F= '{print $2}' | awk -F\" '{print $2}' increatedNum=$(printf "%03d" expr $(echo $OldVersion | cut -d'.' -f4) + 1) NewVersion=echo $OldVersion | cut -d'.' -f1-3.$increatedNum sed -i "s/$OldVersion/$NewVersion/g" descriptor.xml

Не могли бы вы попробовать следующее.

awk 'BEGIN{FS=OFS=".";s1="\""} {$NF+=1;$NF=$NF s1} 1'  Input_file

Вывод будет следующим.

version="01.00.00.42"

В случаеВы хотите сохранить вывод в сам файл Input_file, используя следующее:

awk 'BEGIN{FS=OFS=".";s1="\""} {$NF+=1;$NF=$NF s1} 1' Input_file > temp && mv temp Input_file


ИЛИ согласно комментарию @ tshiono, вы также можете попробовать выполнить следующее.

awk 'BEGIN{FS=OFS=".";s1="\""} {$NF+=1;$NF=sprintf("%03d%c", $NF, s1)} 1' Input_file
...