可能对于知道的人来说简单的问题,但我很难从文件中检索一些variables值。 我的文件是这样的:
variable1 12 variable2 43 variable3 897
我想得到variable2,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
只要没有包含空格的变量(在左栏中),这将工作。
编辑:
由于标题是“用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来查找行,然后使用剪切来提取值:
$ grep ^variable2 myFile | cut -d ' ' -f 2
测试:
$ cat myFile variable1 12 variable2 43 variable3 897 $ grep ^variable2 myFile | cut -d ' ' -f 2 43 $
对于像这样格式化的文件,grep | awk将起作用:
grep variable2文件| awk'{print $ 2}'
不要指望它的格式稍有不同。