В настоящий момент этот код заменяет все вхождения моей строки соответствия моей заменяющей строкой, но только для файла, который я указываю в командной строке. Есть ли способ изменить это так, чтобы все .txt-файлы, например, в том же каталоге (указанный мной каталог) обрабатывались без необходимости запускать это 100 раз в отдельных файлах?Perl - поиск и замена по нескольким строкам по нескольким файлам в указанном каталоге
#!/usr/bin/perl
use warnings;
my $filename = $ARGV[0];
open(INFILE, "<", $filename) or die "Cannot open $ARGV[0]";
my(@fcont) = <INFILE>;
close INFILE;
open(FOUT,">$filename") || die("Cannot Open File");
foreach $line (@fcont) {
$line =~ s/\<br\/\>\n([[:space:]][[:space:]][[:space:]][[:space:]][A-Z])/\n$1/gm;
print FOUT $line;
}
close INFILE;
Я также попытался это:
perl -p0007i -e 's/\<br\/\>\n([[:space:]][[:space:]][[:space:]][[:space:]][A-Z])/\n$1/m' *.txt
Но заметил, что изменяет только первое вхождение подходящего шаблона и игнорирует все остальное в файле.
Я также попытался это, но он не работает в том смысле, что он просто создает пустой файл:
use v5.14;
use strict;
use warnings;
use DBI;
my $source_dir = "C:/Testing2";
# Store the handle in a variable.
opendir my $dirh, $source_dir or die "Unable to open directory: $!";
my @files = grep /\.txt$/i, readdir $dirh;
closedir $dirh;
# Stop script if there aren't any files in the list
die "No files found in $source_dir" unless @files;
foreach my $file (@files) {
say "Processing $source_dir/$file";
open my $in, '<', "$source_dir/$file" or die "Unable to open $source_dir/$file: $!\n";
open(FOUT,">$source_dir/$file") || die("Cannot Open File");
foreach my $line (@files) {
$line =~ s/\<br\/\>\n([[:space:]][[:space:]][[:space:]][[:space:]][A-Z])/\n$1/gm;
print FOUT $line;
}
close $in;
}
say "Status: Processing of complete";
Просто интересно, что я упускаю из моего кода выше? Благодарю.
Спасибо. Как включить мой поиск и заменить код в цикле for (@all_files)? – user1236443
user1418706 Вы можете подробнее рассказать о том, как я должен структурировать свой код? – user1236443