У меня есть это в file.txt
ФОРМА: lookupfile
Версия: 1
$i LookupFile:""
Как я могу найти это в файле и добавить переменную b
к $i
.
Так пример
ВХОД
ФОРМА: lookupfile
Версия: 1
LookupFile:4
Предположим мой b=300
ВЫВОД
ФОРМА: lookupfile
Версия: 1
LookupFile:304
awk -v b=$b 'BEGIN {FS=OFS=":"} /LookupFile/ {print $1,$2+300;next} {print}' file.txt
Вот другой, с sed
:
num=$(sed -n '/LookupFile:.*/p' file.txt | cut -d':' -f2); substitute=$(expr 300 + $num ); sed "s/LookupFile:.*/LookupFile:$substitute/g" file.txt
, Если Вы хотите заставить sed сделать изменения в файле, используйте эти -i
флаг с последней sed командой
Используя Perl:
perl -pe "s/^(LookupFile:)(.*)/\$1.($b+\$2)/e" file.txt
awk -v b=$b -F: '{ if ( $1 == "LookupFile" ) $0=$1":"($2+b); print $0 }' file.txt
Это распечатает всю строку и изменит строку только, когда 1$ будет строкой "LookupFile". Разделитель ":"
Используя gawk
b=300; gawk -v "b=$b" '/^LookupFile/ {line=gensub (/(^LookupFile:.*)[0-9]+/,"\\1",$0); number=gensub(/^LookupFile:([0-9]+)/,"\\1",$0); printf "%s",line; printf "%s",number+b"\n"} !/^LookupFile/ {print}' foo
Пример
$ cat foo
FORM: lookupfile
Version: 1
LookupFile:4
$ b=300; gawk -v "b=$b" '/^LookupFile/ {line=gensub (/(^LookupFile:.*)[0-9]+/,"\\1",$0); number=gensub(/^LookupFile:([0-9]+)/,"\\1",$0); printf "%s",line; printf "%s",number+b"\n"} !/^LookupFile/ {print}' foo
FORM: lookupfile
Version: 1
LookupFile:304