के साथ perl:
if perl -0777 -e '$n = <>; $h = <>; exit(index($h,$n)<0)' needle.txt haystack.txt
then echo needle.txt is found in haystack.txt
fi
-0octalरिकॉर्ड परिसीमन को परिभाषित करता है। जब वह अष्टक संख्या 0377 (अधिकतम बाइट मान) से अधिक है, तो इसका मतलब है कि कोई सीमांकक नहीं है, यह करने के बराबर है $/ = undef। उस स्थिति में, <>किसी एकल फ़ाइल की पूर्ण सामग्री लौटाता है, वह है स्लुरप मोड ।
एक बार जब हमारे पास दो $hऔर $nचर में फ़ाइलों की सामग्री होती है , तो हम यह index()निर्धारित करने के लिए उपयोग कर सकते हैं कि क्या एक दूसरे में पाया जाता है।
हालांकि इसका मतलब है कि पूरी फाइलें स्मृति में संग्रहीत हैं, जिसका अर्थ है कि यह विधि बहुत बड़ी फ़ाइलों के लिए काम नहीं करेगी।
Mmappable फ़ाइलों के लिए (आमतौर पर नियमित फ़ाइलें और ब्लॉक डिवाइस की तरह अधिकांश खोज योग्य फ़ाइलें), जो mmap()फ़ाइलों पर उपयोग करके चारों ओर काम किया जा सकता है , जैसे कि Sys::Mmapपर्ल मॉड्यूल:
if
perl -MSys::Mmap -le '
open N, "<", $ARGV[0] || die "$ARGV[0]: $!";
open H, "<", $ARGV[1] || die "$ARGV[1]: $!";
mmap($n, 0, PROT_READ, MAP_SHARED, N);
mmap($h, 0, PROT_READ, MAP_SHARED, H);
exit (index($h, $n) < 0)' needle.txt haystack.txt
then
echo needle.txt is found in haystack.txt
fi