我在 file.txt 中有这个
形式:lookupfile
版本:1
LookupFile:“$i”
我如何在文件中找到它并向b
其中添加变量$i
。
例如
输入
表格:lookupfile
版本:1
LookupFile:4
假设我的 b=300
输出
表格:lookupfile
版本:1
LookupFile:304
答案1
awk -v b=$b -F: '{ if ( $1 == "LookupFile" ) $0=$1":"($2+b); print $0 }' file.txt
这将打印所有行,并且仅当 $1 是“LookupFile”字符串时才会更改行。分隔符为“:”
答案2
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 命令中使用标志
答案3
使用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
答案4
使用 Perl:
perl -pe "s/^(LookupFile:)(.*)/\$1.($b+\$2)/e" file.txt