Хорошим началом было бы прочитать документацию для grep()
.Если вы это сделаете, вы увидите, что Perl grep()
работает несколько иначе, чем команда Unix grep
.Команда Unix просто ищет текст в списке файлов.Версия Perl работает с любым списком данных и возвращает все элементы в этом списке, для которых произвольное логическое выражение имеет значение true.
Версия Perl команды Unix будет выглядеть примерно так:
while (<$some_open_filehandle>) {
print if /$some_string/;
}
Это не совсем то, что вы хотите, но мы можем использовать это как начало.Во-первых, давайте напишем что-то, что берет имя файла и строку и проверяет, появляется ли строка в файле:
sub is_string_in_file {
my ($filename, $string) = @_;
open my $fh, '<', $filename or die "Cannot open file '$filename': $!\n";
return grep { /$string/ } <$fh>;
}
Теперь мы можем использовать это в цикле, который использует readdir()
, чтобы получить список файлов.
my @files;
my $dir = '/opt/files/treated/postpaid/';
opendir my $dh, $dir or die $!;
while (my $file = readdir($dh)) {
if (is_string_in_file("$dir$file", 1115852311) {
push @files, "$dir$file";
}
}
После запуска этого кода список файлов, содержащих вашу строку, будет иметь вид @files
.
Возможно, вы захотите посмотреть glob()
вместо opendir()
иreaddir()
.