Dengan 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
mendefinisikan pembatas rekaman. Ketika angka oktal lebih besar dari 0377 (nilai byte maksimum), itu berarti tidak ada pembatas, itu setara dengan melakukan $/ = undef
. Dalam hal ini, <>
mengembalikan konten lengkap dari satu file, itulah mode slurp .
Setelah kami memiliki konten file dalam dua $h
dan $n
variabel, kita dapat menggunakan index()
untuk menentukan apakah satu ditemukan di yang lain.
Namun itu berarti bahwa seluruh file disimpan dalam memori yang berarti metode itu tidak akan berfungsi untuk file yang sangat besar.
Untuk file mmappable (biasanya termasuk file biasa dan file yang paling dicari seperti perangkat blok), yang dapat dikerjakan dengan menggunakan mmap()
pada file, seperti dengan Sys::Mmap
modul 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