तुम सच में एक उचित JSON पार्सर उपयोग नहीं कर सकते जैसे jq
[1] , एक awk
आधारित समाधान कोशिश:
बैश 4.x:
readarray -t values < <(awk -F\" 'NF>=3 {print $4}' myfile.json)
बैश 3 .x:
IFS=$'\n' read -d '' -ra values < <(awk -F\" 'NF>=3 {print $4}' myfile.json)
यह स्टोर सभी संपत्ति मूल्य बैश सरणी ${values[@]}
में, जिसे आप
declare -p values
के साथ देख सकते हैं।
- प्रत्येक संपत्ति अपनी पंक्ति में होना चाहिए,
- सभी मूल्यों डबल-कोटेड होना चाहिए,
- एम्बेडेड भाग निकले दोहरे उद्धरण चिह्नों समर्थित नहीं हैं:
ये समाधान सीमाएं हैं।
ये सभी सीमाएं उचित JSON पार्सर का उपयोग करने की सिफारिश को मजबूत करती हैं।
नोट: वैकल्पिक समाधान निम्नलिखित बैश 4.x + readarray -t values
आदेश का उपयोग करें, लेकिन वे भी बैश 3.x विकल्प, IFS=$'\n' read -d '' -ra values
साथ काम करते हैं।
grep
+ cut
संयोजन: एक grep
आदेश से काम नहीं चलेगा (जब तक आप जीएनयूgrep
का उपयोग करें - नीचे देखें), लेकिन cut
जोड़ने में मदद करता है:
readarray -t values < <(grep '"' myfile.json | cut -d '"' -f4)
जीएनयूgrep
: पीसीआरई का समर्थन करने के लिए -P
का उपयोग करना, जो समर्थक
readarray -t values < <(grep -Po ':\s*"\K.+(?="\s*,?\s*$)' myfile.json)
अंत में, यहाँ एक शुद्ध बैश है (3: टी \K
सब कुछ अब तक का मिलान नहीं हुआ (एक नज़र-पीछे दावा करने के लिए एक और अधिक लचीला विकल्प) के साथ ही लुक-आगे दावे ((?=...)
) ड्रॉप करने .x +) समाधान:
क्या प्रदर्शन के संदर्भ में इस एक व्यवहार्य विकल्प है कि बनाता है कोई बाहरी उपयोगिताओं प्रत्येक पाश यात्रा में कहा जाता है है, हालांकि, बड़ी इनपुट फ़ाइलों के लिए, बाहरी उपयोगिताओं के आधार पर एक समाधान बहुत तेज होगा।
#!/usr/bin/env bash
declare -a values # declare the array
# Read each line and use regex parsing (with Bash's `=~` operator)
# to extract the value.
while read -r line; do
# Extract the value from between the double quotes
# and add it to the array.
[[ $line =~ :[[:blank:]]+\"(.*)\" ]] && values+=("${BASH_REMATCH[1]}")
done < myfile.json
declare -p values # print the array
[1] यहाँ एक मजबूत jq
आधारित समाधान (बैश 4.x) इस तरह दिखाई देगा:
readarray -t values < <(jq -r '.[]' myfile.json)
उपयोग grep कर सकते हैं। – sjsam
[\ [यह \]] पर एक नज़र डालें [http://unix.stackexchange.com/questions/177843/parse-one-field-from-an-json-array-into-bash-array) प्रश्न और शो इसे हल करने के लिए हम आपके हिस्से पर कुछ प्रयास करते हैं। – sjsam
यह 'बिल्ली myfile.json | grep नाम | कट-डी ':' -एफ 2' मदद कर सकता है। –