GNU, या FreeBSD या NetBSD या OpenBSD (और संभावित रूप से अन्य) के साथ awk:
find . -type f -exec awk '
/^#!.*python/{print FILENAME}
{nextfile}' {} +
केवल प्रत्येक फ़ाइल की पहली पंक्ति को देखेगा और awkआवश्यकतानुसार कुछ s को चलाएगा ।
nextfileबयान से ऊपर मानक नहीं है, लेकिन जीएनयू एक (जो शायद है यह जहां से उत्पन्न) सहित कुछ कार्यान्वयन में पाया जाता है।
हालांकि ऊपर दिया गया कोड अन्य कार्यान्वयन में भी काम करता दिखाई देगा, लेकिन nextfileस्टेटमेंट वहां कुछ भी नहीं करेगा (एक परेशान nextfileचर में शामिल अभिव्यक्ति के रूप में पहचाना जाएगा ), इसका मतलब है कि सभी फाइलें पूरी तरह से पढ़ी जाएंगी और फ़ाइल नाम हर मिलान लाइन के लिए मुद्रित किया जाए।
यदि आपका awkसमर्थन FNR(जैसे POSIX awks करते हैं, लेकिन मूल नहीं awk, तो Solaris पर /usr/xpg4/bin/awkऔर नहीं /usr/bin/awk) और नहीं nextfile, आप इसे लिख सकते हैं:
find . -type f -exec awk 'FNR == 1 && /^#!.*python/{print FILENAME}' {} +
जो अभी भी awkसंभव के रूप में कुछ s चलेंगे, लेकिन फ़ाइलों को पूरी तरह से पढ़ेंगे।
फ़ाइलों को पूरी तरह से पढ़ने से बचने के लिए एक और विकल्प जो हर काम करेगा awkऔर findइसका मतलब होगा कि awkप्रति फ़ाइल एक चलना होगा:
find . -type f -exec awk '
/^#!.*python/{r=1};{exit}
END {exit(1-r)}' {} \; -print
grep -lजैसे ही कोई फ़ाइल ढूंढना बंद करता है, जैसे ही उसे कोई मेल मिलता है, बिना मिलान वाली फ़ाइलों के लिए, वह पूरी फ़ाइल को पढ़ लेगी। यह फाइलों के बीच में भी मैच ढूंढता है, इसलिए उदाहरण के लिए यह एक ऐसीsharफाइल पर मेल कर सकता है जिसमें अजगर लिपियाँ हों।