ด้วย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
นั่นหมายความว่าไม่มีตัวคั่นก็เทียบเท่ากับการทำ ในกรณีที่<>
ส่งกลับเนื้อหาเต็มรูปแบบของไฟล์เดียวนั่นคือโหมด Slurp
เมื่อเรามีเนื้อหาของไฟล์ในสอง$h
และ$n
ตัวแปรเราสามารถใช้index()
เพื่อตรวจสอบว่ามีคนพบในอื่น ๆ
ซึ่งหมายความว่าอย่างไรก็ตามไฟล์ทั้งหมดจะถูกเก็บไว้ในหน่วยความจำซึ่งหมายความว่าวิธีนี้จะไม่ทำงานสำหรับไฟล์ที่มีขนาดใหญ่มาก
สำหรับไฟล์ mmappable (โดยปกติจะมีไฟล์ปกติและไฟล์ที่ค้นหาได้มากที่สุดเช่นอุปกรณ์บล็อก) ซึ่งสามารถใช้งานได้โดยใช้mmap()
ไฟล์เช่นเดียวกับSys::Mmap
โมดูล perl:
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