2011-11-20 16 views
9

में बैश में मैं अपने grep परिणामों को सरणी में एकत्र करने की कोशिश कर रहा हूं, प्रत्येक सेल प्रत्येक पंक्ति को धारण करता है। मैं इस लाइनबैश grep परिणाम सरणी

wget -O सूचकांक -E $ CURRENTURL

और फिर मैं 'सूचकांक' फ़ाइल परिणाम (अन्य यूआरएल) सरणी प्रत्येक पंक्ति प्रति में grep करना चाहते हैं के साथ यूआरएल downloaing कर रहा हूँ सेल, सही वाक्यविन्यास क्या होना चाहिए?

सरणी = (grep "some expression" index)

??

+0

यह वह जगह है जहाँ आप सही लिंक खोजने की जरूरत है? तो लिंक कहाँ होंगे? यूआरएल के लिए एक व्यापक Regex बनाना मुश्किल है। – beta0x64

उत्तर

8
readarray GREPPED < <(grep "some expression" index) 
for item in "${GREPPED[@]}" 
do 
    # echo 
    echo "${item}" 
done 

ओह, और उन -v greps तो जैसे गठबंधन:

egrep -v '\.(jpg|gif|xml|zip|asp|php|pdf|rar|cgi|html?)' 
+0

धन्यवाद, मैं इसके साथ अपना कोड सुधारूंगा, कोड के पहले ब्लॉक ने मुझे क्या लिखा है? ऐसी सरणी या पहली पंक्ति से पढ़ना भी सरणी में डालता है? –

+0

पहली पंक्ति सरणी को आउटपुट करती है: http://www.gnu.org/s/bash/manual/html_node/Bash-Builtins.html; अन्य 4 लाइनें सिर्फ डेमो कैसे करें (व्हाइटस्पेस-सुरक्षित रूप से) उन पर पुन: प्रयास करें – sehe

+0

ध्यान दें कि 'रीडार्रे' बैश के लिए एक बहुत ही नया जोड़ा है। यह लगभग किसी भी लिनक्स सर्वर पर उपलब्ध नहीं है, या यहां तक ​​कि सिग्विन और मिंगव इंस्टॉलेशन जहां मैं काम करता हूं। यदि आप एक पोर्टेबल समाधान चाहते हैं, तो नीचे मेरी 'शायद सबसे अधिक ...' पोस्ट देखें। – Blaine

3

संभवत: कई खराब विकल्पों में सबसे अधिक सुरुचिपूर्ण एक अस्थायी फ़ाइल का उपयोग करना होगा।

wget $blah | grep 'whatever' > $TMPFILE 
declare -a arr 
declare -i i=0 
while read; do 
    arr[$i]="$REPLY" 
    ((i = i + 1)) 
done < $TMPFILE 

मेरे पास व्याख्या करने का समय नहीं है, लेकिन सीधे पढ़ने में पाइप न करें।

कोई यूनिक्स खोल इस कार्य के लिए उपयुक्त उपकरण नहीं है। पर्ल, ग्रोवी, जावा, पायथन ... बहुत सी भाषाएं इस सुंदरता को संभाल सकती हैं, लेकिन यूनिक्स शैल में से कोई भी नहीं।

संबंधित मुद्दे