2015-08-19 2 views
-1

Я хочу получить доступ к текстовому файлу и прочитать его содержимое, чтобы изменить их с новым значением.Найти значение переменной и заменить ее новым значением в UNIX

Это Find and Replace действительно полезно, но мое требование немного отличается.

Скажет, если это мое содержимое файла

image.description=Template Image 08182015 
image.version=1.3.111 
baseline.name=001_08_18_2015 

Я хочу изменить их

image.description=Template Image 08192015 #19 instead of 18 
image.version=1.3.112      #112 instead of 111 
baseline.name=001_08_19_2015    #19 instead of 18 

В любой момент времени я не буду, зная, что значение каждого переменным, но все Я знаю, это имя переменной, например, «Image version». Теперь мне нужен какой-то скрипт, чтобы найти значение переменной image.version и автоматически увеличивать значение до следующего возможного целого числа.

Любые предложения/мысли?

+1

, так как вы нашли соответствующий ответ, что вы пробовали? покажите свои попытки, вы можете быть близки к решению! – fedorqui

+0

Является ли значение изображения.писанием всегда «Шаблоном изображении MMDDYYYY»? Или могут быть разные (или нет) слова до даты? Могут ли быть слова после даты? – jas

+0

@jas, он всегда будет таким же. только числовой контент будет меняться в зависимости от текущей даты –

ответ

1

С GNU AWK для третьего Arg, чтобы соответствовать():

$ awk 'match($0,/(image\.version.*\.)(.*)/,a){$0=a[1] a[2]+1} 1' file 
image.description=Template Image 08182015 
image.version=1.3.112 
baseline.name=001_08_18_2015 

Для остальных, так как не арифметика не участвует, вы должны быть в состоянии использовать только gensub() аналогичным образом.

Или, может быть, это такая вещь, что вы ищете:

$ cat tst.awk 
BEGIN { FS=OFS="=" } 
$1=="image.description" { match($2,/.* ../); $2=substr($2,1,RLENGTH) substr($2,1+RLENGTH,2)+1 substr($2,3+RLENGTH) } 
$1=="image.version"  { match($2,/.*\./); $2=substr($2,1,RLENGTH) substr($2,1+RLENGTH)+1 } 
$1=="baseline.name"  { split($2,a,/_/); $2=a[1]"_"a[2]"_"a[3]+1"_"a[4] } 
{ print } 

$ awk -f tst.awk file 
image.description=Template Image 08192015 
image.version=1.3.112 
baseline.name=001_08_19_2015