2010-02-25 3 views
6

मुझे एक फ़ाइल मिली है जिसमें key=value जोड़े की एक सूची है, प्रत्येक अपनी लाइन पर। शैल कमांड का उपयोग करके निर्दिष्ट कुंजी के मान को लाने का सबसे अच्छा तरीका क्या है?शैल आदेश कुंजी मान जोड़े से मेल खाने के लिए

+0

सीमा, सी, या बैश खोल – live2dream95

+0

मैं इस के साथ समाप्त हो गया: grep "कुंजी "फाइलनाम | sed '/ key = //' – live2dream95

उत्तर

6

के बारे में
grep "key" my_file | cut -d'=' -f2 
+0

@mouviciel, गलत टिप्पणी स्थान साथी? (-: –

+2

क्या होगा यदि फ़ाइल में कुंजी = मान पैरामीटर की क्षैतिज सूची है? – CMCDragonkai

+0

पोस्टर ने कहा "प्रत्येक अपनी लाइन पर"। लेकिन हाँ, यदि प्रति पंक्ति एक से अधिक थे तो यह काम नहीं करेगा। –

1

यह मैं कैसे ksh में ऐसा क्या है।

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

आप अजीब के बजाय कट का भी उपयोग कर सकते हैं। यदि आप किसी कुंजी के साथ कुंजी जोड़ी को सीमित करते हैं तो आप -F "=" को छोड़ सकते हैं।

+2

grep हो सकता है छोड़ा गया। यह सब कुछ कर सकता है। '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

निर्भर करता है। यदि ओपी को सटीक मिलान की आवश्यकता है। यदि नहीं, तो regexp उपयुक्त है। ओपी एक एसक्यूएल "जैसे" regexp के बराबर लागू कर सकता है। – ghostdog74

+0

उपरोक्त awk कमांड Solaris के साथ काम नहीं करता है। – JonnyWizz