यदि आपको केवल यह जांचने की आवश्यकता है कि कोई मिलान पाया गया है या नहीं, वांछित प्रीफ़िक्स ( $1
) की लंबाई तक सभी इनपुट लाइनों को काटें और फिर निश्चित-पैटर्न grep का उपयोग करें:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
मिलान लाइनों की गिनती प्राप्त करना भी आसान है:
cut -c 1-"${#1}" | grep -cF "$1"
या सभी मिलान लाइनों की पंक्ति संख्या (पंक्ति संख्या 1 से शुरू होती है):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
आप करने के लिए लाइन नंबर फ़ीड सकता है head
और tail
मिलान लाइनों का पूरा पाठ प्राप्त करने के लिए, लेकिन उस बिंदु पर यह सिर्फ अजगर या रूबी की तरह एक आधुनिक स्क्रिप्टिंग भाषा के लिए तक पहुँचने के लिए आसान है।
(उपरोक्त उदाहरण पॉज़िक्स ग्रेप और कट को मानते हैं। वे मान लेते हैं कि खोज करने के लिए फ़ाइल मानक इनपुट से आती है, लेकिन इसके बदले फ़ाइल नाम लेने के लिए आसानी से अनुकूलित किया जा सकता है।)
संपादित करें: आपको यह भी सुनिश्चित करना चाहिए कि पैटर्न ( $1
) शून्य-लंबाई वाला स्ट्रिंग नहीं है। अन्यथा cut
कहने में विफल रहता है values may not include zero
। इसके अलावा, यदि बैश का उपयोग करते हैं, तो set -o pipefail
त्रुटि-निकास को पकड़ने के लिए उपयोग करें cut
।
grep '^$1'
? या आपका मतलब यह नहीं था कि आप$1
शेल द्वारा विस्तारित होने से रोकना चाहते हैं ?