2

对于知道的人来说可能是一个简单的问题,但我很难从文件中检索一些变量值。我的文件是这样的:

variable1 12
variable2 43
variable3 897

我想得到变量2、43的值。

我用 sed 尝试了一些命令,但没有运气:

sed -n 's/variable2 //;s/variable3//' myFile
4

4 回答 4

3

只有 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
于 2013-01-10T15:02:29.610 回答
3

你必须使用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
于 2013-01-10T15:11:59.737 回答
2

使用grep查找该行,然后使用cut提取值:

$ grep ^variable2 myFile | cut -d ' ' -f 2

测试:

$ cat myFile 
variable1 12
variable2 43
variable3 897
$ grep ^variable2 myFile | cut -d ' ' -f 2
43
$ 
于 2013-01-10T14:59:43.523 回答
1

对于这样格式的文件, grep|awk 将起作用:

grep 变量 2 文件 | awk '{打印 $2}'

对于格式稍有不同的文件,不要指望它。

于 2013-01-10T15:00:37.333 回答