对于知道的人来说可能是一个简单的问题,但我很难从文件中检索一些变量值。我的文件是这样的:
variable1 12
variable2 43
variable3 897
我想得到变量2、43的值。
我用 sed 尝试了一些命令,但没有运气:
sed -n 's/variable2 //;s/variable3//' myFile
只有 sed
:_
$ sed -n 's/^variable2 //p' file
43
您的问题是您正在使用-n
来抑制输出,sed
因此您需要该p
标志,以便sed
打印发生替换的行。
由于这只是模式匹配,因此我只使用grep:
$ cat file
variable1 12
variable2 43
variable3 897
$ grep -Po '(?<=^variable2 )\d+' file
43
甚至只是awk
:
$ awk '$1=="variable2"/{print $2}' file
43
你必须使用sed
吗?
我更喜欢使用awk
这种东西:
awk -v varname="variable2" '$1==varname {print $2}' myFile
只要没有包含空格的变量(在左列中),这将起作用。
编辑:
由于标题是“Get variable value from file with bash”,这里是一个不涉及外部程序的版本
wantvar="variable2"
datafile="myFile"
while read varname varval; do
# Case-insensitive matching. If you need case-sensitivity, remove the pair of commas
# on both sides.
if [[ ${varname,,} = ${wantvar,,} ]]; then
echo $varval
break
fi
done < $datafile
对于这样格式的文件, grep|awk 将起作用:
grep 变量 2 文件 | awk '{打印 $2}'
对于格式稍有不同的文件,不要指望它。