로 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
레코드 분리 문자를 정의합니다. 8 진수가 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