में स्टोर grep आउटपुट मुझे निर्देशिका में एक पैटर्न खोजना होगा और फ़ाइलों के नामों को सहेजना होगा जिसमें इसे सरणी में शामिल किया गया है।सरणी बैश
पैटर्न के लिए खोज:
grep -HR "pattern" . | cut -d: -f1
यह मैं सभी फ़ाइल नाम है कि "पैटर्न" शामिल प्रिंट करता है।
अगर मैं कोशिश:
targets=$(grep -HR "pattern" . | cut -d: -f1)
length=${#targets[@]}
for ((i = 0; i != length; i++)); do
echo "target $i: '${targets[i]}'"
done
यह प्रिंट केवल एक ही तत्व है कि सभी filnames के साथ एक स्ट्रिंग है।
output: target 0: 'file0 file1 .. fileN'
लेकिन मैं की जरूरत है:
output: target 0: 'file0'
output: target 1: 'file1'
.....
output: target N: 'fileN'
मैं कैसे ठिकानों पर एक उबाऊ विभाजन कार्रवाई करते समय बिना परिणाम प्राप्त कर सकते हैं?
शानदार! मैं पहले से ही "-l" विकल्प देख रहा था, बीटीडब्ल्यू महान हिट। क्या आप समझा सकते हैं कि क्यों दो ब्रैकेट जोड़ना काम करता है? –
यह बाश में सरणी निर्माण का वाक्यविन्यास है। यदि आप बाहरी '(..)' को हटाते हैं तो आप केवल एक सरल शैल चर के लिए 'grep' आउटआउट असाइन कर रहे हैं जिसे सरणी के रूप में नहीं माना जाएगा। – anubhava
काम नहीं कर रहा है अगर फ़ाइल नाम में व्हाइटस्पेस या वाइल्डकार्ड – lihao