2010-02-25 22 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