2010-02-25 2 views
6

У меня есть файл, содержащий список key=value пар, каждый на своей собственной линии. Каков наилучший способ получить значение для указанного ключа с помощью команд оболочки?Команды оболочки для соответствия парам значений ключей

+0

Борн, C, или Баш оболочки – live2dream95

+0

я закончил с этим: ключ Grep» "filename | sed '/ key = //' – live2dream95

ответ

6

насчет

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

@mouviciel, неверный комментарий mate? (-: –

+2

Что делать, если файл имеет горизонтальный список параметров key = value? – CMCDragonkai

+0

Плакат сказал «каждый на своей собственной линии». Но да, если их было больше одной строки, это не сработало. –

1

Это, как я это делаю в KSH.

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

Вы также можете использовать разрез вместо awk. Если вы разделите пару ключей пробелом, вы можете сбросить значение -F "=".

+2

grep может быть awk может сделать все. 'awk -F" = "'/^key =/{print $ 2}'' – ghostdog74

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 

или вы можете просто использовать оболочку (например, Баш)

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

может даже не понадобиться regexp: 'awk ... '$ 1 == k {print $ 2}' файл –

+0

зависит от того, требуется ли OP точное соответствие, если нет, regexp является подходящим. OP может реализовать эквивалент SQL как эквивалент с regexp. – ghostdog74

+0

Команда awk, похоже, не работает с Solaris. – JonnyWizz

Смежные вопросы