LINUX.ORG.RU

версия,число +1

 , , , ,


0

1

Помощь нужна, необходимо, исправить в файле переменную на +1 к числу, т.е.

betaver=9

надо послать команду какую-нибудь что бы эта betaver увеличилась на +1 и стало 10

так же и для версии 10 хотелось бы превратить ее в 11 и т.д.

Кто что из опыта посоветовал бы?

★★★★★

Последнее исправление: NK (всего исправлений: 3)

Вообще-то, и чистым sed можно сделать: для каждого разряда можно использовать свою букву, например, c для сотен, b для десятков, a для единиц. Тогда, например, число 256 записывается так: ccbbbbbaaaaaa.

Для инкремента достаточно дописать в конце a, при необходимости пройтись по разрядам, заменяя 10 одинаковых символов на один следующий и совершить обратное преобразование.

anarquista ★★★★★
()
Ответ на: комментарий от sdio

спасибо. но что-то не пойму как работает, оба варианта висят

$ betaver=8; awk -F= '{if ($1=="$betaver") {print $1"="$2+1} else {print $0}}'; echo $betaver
^C
$ betaver=8; awk -F= '{if ($1=="betaver") {print $1"="$2+1} else {print $0}}'; echo $betaver
^C
NK ★★★★★
() автор топика
Ответ на: комментарий от NK

исправить в файле переменную
в файле
betaver=8; awk -F= '{if ($1==«betaver») {print $1"=«$2+1} else {print $0}}'; echo $betaver

И где у тебя файл, имярек по версии анонимуса?

sdio ★★★★★
()
Ответ на: комментарий от unterwulf

1

И как я раньше до такого шортката не додумался?..

thriller ★★
()
Ответ на: комментарий от sdio

Так, я как в случае , если sed просто решил подойти не знавшт awk,

И где у тебя файл,

все равно что-то не то(

$ cat ABUILD | grep betaver=
betaver=9
$ awk -F= '{if ($1==«betaver») {print $1"=«$2+1} else {print $0}}' ./ABUILD 
awk: {if ($1==«betaver») {print $1"=«$2+1} else {print $0}}
awk:          ^ invalid char '�' in expression
NK ★★★★★
() автор топика
Ответ на: комментарий от sin_a

спасибо за ссыль, костыльно, но получилось через sed+let+etc.

b=`cat ABUILD | grep betaver= | sed s/betaver=//`; echo $b; let "n=$b+1"; echo $n; sed "/^betaver=/s|$b|$n|" ABUILD | grep "betaver="
9
10
betaver=10
NK ★★★★★
() автор топика
Ответ на: комментарий от NK

а как все таки изменения в файл записать?

Ну stdout перенаправить же.

$ cat >ABUILD <<EOF
> alphaver=1
> betaver=2
> gammaver=3
> EOF
$ awk -F= -vOFS== '$1 == "betaver" { $2++ } 1' ABUILD > ABUILD.new
$ mv ABUILD{.new,}
$ cat ABUILD
alphaver=1
betaver=3
gammaver=3
unterwulf
()
Ответ на: комментарий от NK

Так не проще?

$ a=9
$ b="betaver="$a
$ echo $b
betaver=9
$ a=$((a+1))
$ b="betaver="$a
$ echo $b
betaver=10

sin_a ★★★★★
()
Последнее исправление: sin_a (всего исправлений: 1)
[ megabaks@desktop ] ~ $ echo "betaver=9" > test_file
[ megabaks@desktop ] ~ $ export "$(grep "^betaver=" test_file)"
[ megabaks@desktop ] ~ $ sed "s|betaver=${betaver}|betaver=$(( ${betaver} + 1  ))|" -i test_file 
[ megabaks@desktop ] ~ $ cat test_file 
betaver=10
[ megabaks@desktop ] ~ $
megabaks ★★★★
()
Ответ на: комментарий от unterwulf

ABUILD > ABUILD.new

понятно , спасибо, а то я просто ABUILD > ABUILD сделал

NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.