LINUX.ORG.RU

Помощь в написсание скрипта[bash][grep][sed]


0

1

Задача достаточно простая, но я не разбираюсь в bash и сопутсвоющих программах.
В некотором файле, набитом текстом, есть строчка(хотя в строчке может находится рядом и посторонний текст), содержащая в себе запись, типа VERSION=«0.2.1.1253», необходимо, что бы скрипт считывал, последнее значение (тоеть 1253 в нашем случае) пребовлял к нему единицу и записывал обрано. В результате? в тексте, должно получится из этого: VERSION=«0.2.1.1253», это VERSION=«0.2.1.1254».
Предполагаю что grep'ом надо вытащить VERSION=«0.2.1.1253»(хотя может и сразу можно 1253), bash'ем прибавить единицу, sed'ом внести изменение.
Так как я в этом всем дуб, то прошу у местного населения помощи(пытался сам разобраться, 2 часа провозился только над sed'ом).

★★★★★

Ответ на: комментарий от deterok

кстати, забыл добавить, что пример меняет сразу в файле (ключ -i). т.е. типа так:

perl -i -pe 's/^(VERSION="\d+\.\d+\.\d+\.)(\d+)"/$1.($2+1)/e' version.txt
arsi ★★★★★ ()

> пребовлял

В результате? в тексте

должно получится



facepalm.txt

По теме:

VERSION=«0.2.1.1253»


Регуляркой разбиваешь весь текст на 3 части: '... VERSION=«0.2.1.' '1253' '»...'. Инкрементируешь среднюю часть. Склеиваешь всё обратно.

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

Нестрабатывает если строка не начинается с VERSION, а так остальные тесты прошел, пытаюсь разобраться как все устроено.

deterok ★★★★★ ()

>VERSION=«0.2.1.1253»

doc@dt:~$ x='VERSION=«0.2.1.1253»' doc@dt:~$ echo $x VERSION=«0.2.1.1253» doc@dt:~$ echo ${x##*.} 1253" doc@dt:~$ y=${x##*.} doc@dt:~$ echo $y 1253" doc@dt:~$ echo ${y%\«} 1253 doc@dt:~$ z=${y%\»} doc@dt:~$ echo $z 1253 doc@dt:~$ (( t = z + 1 )) doc@dt:~$ echo $t 1254

drBatty ★★ ()
$ cat tralala
VERSION="0.2.1.1253"
popopo
$ number=`sed -rn 's/.*\.([0-9]+)"$/\1/p' tralala`; sed -r 's/(.*\.)[0-9]+("$)/\1'"$((++number))"'\2/' tralala
VERSION="0.2.1.1254"
popopo
Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.