यदि सब कुछ एक ही निर्देशिका में है, तो आप कर सकते हैं:
for file in *fileprefix*; do
grep 'search string' "$file" | tail -1
done
यदि ये बड़ी फाइलें हैं, तो हो सकता है tac
कि फाइल को रिवर्स ऑर्डर (अंतिम पंक्ति पहले) में प्रिंट करके और फिर grep -m1
पहली घटना का मिलान करने के लिए चीजों को गति देने लायक हो । इस तरह, आप पूरी फ़ाइल पढ़ने से बचते हैं:
for file in *fileprefix*; do
tac file | grep -m1 'search string'
done
उन दोनों को लगता है कि कोई निर्देशिका मेल नहीं खा रही है fileprefix
। अगर वहाँ हैं, तो आपको एक त्रुटि मिलेगी जिसे आप अनदेखा कर सकते हैं। यदि यह समस्या है, तो केवल फ़ाइलों के लिए जाँच करें:
for file in *fileprefix*; do
[ -f "$file" ] && tac file | grep -m1 'search string'
done
यदि आपको फ़ाइल नाम मुद्रित करने की आवश्यकता है, तो -H
प्रत्येक grep
आह्वान में जोड़ें । या, यदि आपका grep
समर्थन नहीं करता है, तो इसे भी खोज के माध्यम से बताएं /dev/null
। यह आउटपुट नहीं बदलेगा, लेकिन चूंकि grep
कई फाइलें दी गई हैं, इसलिए यह हमेशा प्रत्येक हिट के लिए फाइल का नाम प्रिंट करेगा:
for file in *fileprefix*; do
grep 'search string' "$file" /dev/null | tail -1
done