grep
स्वयं ऐसा करने में सक्षम है। सीधे शब्दों में झंडा -f
का उपयोग करें:
grep -f <patterns> <file>
<patterns>
प्रत्येक पंक्ति में एक पैटर्न वाली फ़ाइल है, और <file>
वह फ़ाइल है जिसमें आप चीज़ें खोजना चाहते हैं।
ध्यान दें कि, प्रत्येक पंक्ति को एक पैटर्न पर विचार करने के लिए grep
को मजबूर करने के लिए, भले ही प्रत्येक पंक्ति की सामग्री नियमित अभिव्यक्ति की तरह दिखाई दे, आपको ध्वज -F, --fixed-strings
का उपयोग करना चाहिए।
grep -F -f <patterns> <file>
यदि आपकी फ़ाइल एक सीएसवी है, जैसा कि आप ने कहा, आप ऐसा कर सकते हैं:
grep -f <(tr ',' '\n' < data.csv) <file>
उदाहरण के लिए, फ़ाइल "a.txt", निम्नलिखित लाइनों के साथ पर विचार करें:
alpha
0891234
beta
अब
, फ़ाइल "b.txt", लाइनों के साथ:
Alpha
0808080
0891234
bEtA
निम्न आदेश का आउटपुट है:
grep -f "a.txt" "b.txt"
0891234
आप सब पर for
-loop यहाँ की जरूरत नहीं है; grep
स्वयं ही इस सुविधा को प्रदान करता है।
अब अपनी फ़ाइल नाम का उपयोग:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
आप विभाजक आप अपनी फ़ाइल में है करने के लिए ','
बदल सकते हैं।
प्रत्येक फ़ाइल से 2 लाइनों और उन इनपुटों को अपेक्षित आउटपुट शामिल करने के लिए अपने प्रश्न को संपादित करने पर विचार करें। सौभाग्य। – shellter
उपरोक्त आपकी स्क्रिप्ट वहां नाम रिकॉर्ड करने के अलावा 'फ़ाइल' चर का उपयोग नहीं करती है। 'रीड-आर लाइन <$ फ़ाइल के दौरान' कोशिश करें; do'। उस ने कहा, 'ksh' बेकार है और मैंने यह जांच नहीं की है कि यह' -r' के साथ क्या करता है यह जानने के लिए कि यह काम करेगा या नहीं। इसके अलावा, 'grep' नियमित अभिव्यक्तियों की अपेक्षा करेगा और आपके पास मौजूद संख्याओं से मेल खाने वाले किसी भी मूल्य से मेल खाएगा, भले ही सीएसवी फ़ाइल में लाइन के अन्य प्रमुख या पीछे वाले अंक हों: आप' grep -w' या इसी तरह के हो सकते हैं। –