সহ 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()
একটি অপরটিতে পাওয়া যায় কিনা তা নির্ধারণ করতে ব্যবহার করতে পারি ।
তবে এর অর্থ এই যে পুরো ফাইলগুলি মেমরিতে সঞ্চয় করা হয় যার অর্থ এই পদ্ধতিটি খুব বড় ফাইলগুলির জন্য কাজ করবে না।
এমএম্পেবল ফাইলগুলির জন্য (সাধারণত নিয়মিত ফাইল এবং সর্বাধিক সন্ধানযোগ্য ফাইলগুলি যেমন ব্লক ডিভাইসগুলি অন্তর্ভুক্ত করে) এর 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