2010-02-25 26 views
6

我有一个文件,其中包含一对key=value对,每个对自己的行。使用shell命令获取指定键的值的最佳方法是什么?Shell命令来匹配键值对

+0

伯恩,C,或bash shell的 – live2dream95 2010-02-25 15:44:09

+0

我结束了与此: grep的“关键“文件名| sed'/ key = //' – live2dream95 2010-02-26 20:47:47

回答

6

grep "key" my_file | cut -d'=' -f2 
+0

@mouviciel,错误的评论位置队友? ( - : – 2010-02-25 15:54:52

+2

如果文件中有key = value参数的水平列表,该怎么办? – CMCDragonkai 2014-07-01 01:29:12

+0

Poster说“每一行都在自己的行中”,但是,如果每行有多个,那么这将不起作用 – 2014-07-02 14:09:46

1

这就是我如何做到这一点的KSH。

FOO=$(grep "^key=" $filename | awk -F"=" '{print $2}') 

您也可以使用cut而不是awk。如果用空格分隔密钥对,则可以删除-F“=”。

+2

grep可以awk -F“=”'/^key =/{print $ 2}'' – ghostdog74 2010-02-25 15:32:49

1
read -r -p "Enter key to fetch: " key 
awk -vk="$key" -F"=" '$1~k{ print "value for "k" is "$2} ' file 

输出

$ ./shell.sh 
Enter key to fetch: key1 
value for key1 is value1 

,或者你可以使用shell(如bash)的

read -r -p "Enter key to fetch: " key  
while IFS="=" read -r k v 
do 
    case "$k" in 
     *"$key"*) echo "value of key: $k is $v";; 
    esac 
done <"file" 
+0

可能甚至不需要正则表达式:awk ...'$ 1 == k {print $ 2}'文件' – 2010-02-26 18:19:27

+0

取决于。如果OP需要完全匹配。否则,正则表达式是合适的.OP可以通过regexp实现SQL“like”等效。 – ghostdog74 2010-02-26 23:46:10

+0

上面的awk命令似乎不适用于Solaris。 – JonnyWizz 2015-11-23 10:06:28