向已经存在的变量添加数字 sed/grep/awk

向已经存在的变量添加数字 sed/grep/awk

我在 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

相关内容