使用-nreplace后的空白sed输出

可能对于知道的人来说简单的问题,但我很难从文件中检索一些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}' 

不要指望它的格式稍有不同。