Regex 如何使用Perl删除与模式列表匹配的所有文件?

Regex 如何使用Perl删除与模式列表匹配的所有文件?,regex,arrays,perl,file,Regex,Arrays,Perl,File,我有一个文件列表和一个数组,其中包含一些包含文件名模式的值 filename: awefsad-name1-x33 @array=("name1","name2","name3"); 如何删除数组中包含名称的文件 @files = ("*"); foreach $check(@files){ foreach $i(@array){ if($check =~ /\Q$i/){ unlink $check; } } } 您需要使用获取文件

我有一个文件列表和一个数组,其中包含一些包含文件名模式的值

filename: awefsad-name1-x33

@array=("name1","name2","name3");
如何删除数组中包含名称的文件

@files = ("*");
foreach $check(@files){
   foreach $i(@array){
      if($check =~ /\Q$i/){
          unlink $check;
      }
   }
}
您需要使用获取文件名列表。还可以使用将模式预编译为正则表达式。使用好的名字会让你更容易阅读你的代码,
strict
warnings
会告诉你所犯的错误和错误

use strict;
use warnings;
use feature 'say'; # just for demonstration
my @patterns = map { qr/\Q$_/ } ( "name1", "name2", "name3" );

FILE: foreach my $file ( glob '*' ) {
  foreach my $pattern (@patterns) {
    if ($file =~ $pattern) {
      say $file or warn qq{cannot delete $file: $!}; # replace with unlink
      next FILE;
    }
  }
}
编辑:请注意,您只能删除每个文件一次,因此,一旦匹配了一个模式并删除了该文件,我们就可以处理模式列表

我将
unlink
更改为
say
,以便您可以查看它匹配的内容。对我来说,它是有效的:

my @patterns = map { qr/\Q$_/ } ( 'scratch', '.txt' );

__END__
data.txt
file2.txt
scratch.pl
scratch2.pl
您需要使用获取文件名列表。还可以使用将模式预编译为正则表达式。使用好的名字会让你更容易阅读你的代码,
strict
warnings
会告诉你所犯的错误和错误

use strict;
use warnings;
use feature 'say'; # just for demonstration
my @patterns = map { qr/\Q$_/ } ( "name1", "name2", "name3" );

FILE: foreach my $file ( glob '*' ) {
  foreach my $pattern (@patterns) {
    if ($file =~ $pattern) {
      say $file or warn qq{cannot delete $file: $!}; # replace with unlink
      next FILE;
    }
  }
}
编辑:请注意,您只能删除每个文件一次,因此,一旦匹配了一个模式并删除了该文件,我们就可以处理模式列表

我将
unlink
更改为
say
,以便您可以查看它匹配的内容。对我来说,它是有效的:

my @patterns = map { qr/\Q$_/ } ( 'scratch', '.txt' );

__END__
data.txt
file2.txt
scratch.pl
scratch2.pl
您需要使用获取文件名列表。还可以使用将模式预编译为正则表达式。使用好的名字会让你更容易阅读你的代码,
strict
warnings
会告诉你所犯的错误和错误

use strict;
use warnings;
use feature 'say'; # just for demonstration
my @patterns = map { qr/\Q$_/ } ( "name1", "name2", "name3" );

FILE: foreach my $file ( glob '*' ) {
  foreach my $pattern (@patterns) {
    if ($file =~ $pattern) {
      say $file or warn qq{cannot delete $file: $!}; # replace with unlink
      next FILE;
    }
  }
}
编辑:请注意,您只能删除每个文件一次,因此,一旦匹配了一个模式并删除了该文件,我们就可以处理模式列表

我将
unlink
更改为
say
,以便您可以查看它匹配的内容。对我来说,它是有效的:

my @patterns = map { qr/\Q$_/ } ( 'scratch', '.txt' );

__END__
data.txt
file2.txt
scratch.pl
scratch2.pl
您需要使用获取文件名列表。还可以使用将模式预编译为正则表达式。使用好的名字会让你更容易阅读你的代码,
strict
warnings
会告诉你所犯的错误和错误

use strict;
use warnings;
use feature 'say'; # just for demonstration
my @patterns = map { qr/\Q$_/ } ( "name1", "name2", "name3" );

FILE: foreach my $file ( glob '*' ) {
  foreach my $pattern (@patterns) {
    if ($file =~ $pattern) {
      say $file or warn qq{cannot delete $file: $!}; # replace with unlink
      next FILE;
    }
  }
}
编辑:请注意,您只能删除每个文件一次,因此,一旦匹配了一个模式并删除了该文件,我们就可以处理模式列表

我将
unlink
更改为
say
,以便您可以查看它匹配的内容。对我来说,它是有效的:

my @patterns = map { qr/\Q$_/ } ( 'scratch', '.txt' );

__END__
data.txt
file2.txt
scratch.pl
scratch2.pl

将正则表达式连接到单个表达式中会产生此单for循环以取消文件链接

my $match_re = join '|', map {"\Q$_"} ("name1","name2","name3");

for my $file (grep {/$match_re/} <*>) {
    print "unlink $file\n";
}
my$match_re=join'|',map{“\Q$|”}(“name1”、“name2”、“name3”);
对于我的$file(grep{/$match\u re/}){
打印“取消链接$file\n”;
}

将正则表达式连接到一个表达式中会产生一个for循环来取消文件链接

my $match_re = join '|', map {"\Q$_"} ("name1","name2","name3");

for my $file (grep {/$match_re/} <*>) {
    print "unlink $file\n";
}
my$match_re=join'|',map{“\Q$|”}(“name1”、“name2”、“name3”);
对于我的$file(grep{/$match\u re/}){
打印“取消链接$file\n”;
}

将正则表达式连接到一个表达式中会产生一个for循环来取消文件链接

my $match_re = join '|', map {"\Q$_"} ("name1","name2","name3");

for my $file (grep {/$match_re/} <*>) {
    print "unlink $file\n";
}
my$match_re=join'|',map{“\Q$|”}(“name1”、“name2”、“name3”);
对于我的$file(grep{/$match\u re/}){
打印“取消链接$file\n”;
}

将正则表达式连接到一个表达式中会产生一个for循环来取消文件链接

my $match_re = join '|', map {"\Q$_"} ("name1","name2","name3");

for my $file (grep {/$match_re/} <*>) {
    print "unlink $file\n";
}
my$match_re=join'|',map{“\Q$|”}(“name1”、“name2”、“name3”);
对于我的$file(grep{/$match\u re/}){
打印“取消链接$file\n”;
}

我不明白你的问题是什么。您的变量名非常混乱,并且没有使用
严格
警告
。但它仍然应该起作用。当然,
*
不是有效的文件名。查看内置的
glob
以获取文件夹中的文件列表。你只是想分享一些经验而不是提问吗?他使用的是字符串
“*”
,而不是glob
glob“*”
。我只想从目录中获取所有文件名,并删除那些包含我在数组中模式的文件,我的代码不起作用,我需要正确的解决方案我不明白你的问题是什么。您的变量名非常混乱,并且没有使用
严格
警告
。但它仍然应该起作用。当然,
*
不是有效的文件名。查看内置的
glob
以获取文件夹中的文件列表。你只是想分享一些经验而不是提问吗?他使用的是字符串
“*”
,而不是glob
glob“*”
。我只想从目录中获取所有文件名,并删除那些包含我在数组中模式的文件,我的代码不起作用,我需要正确的解决方案我不明白你的问题是什么。您的变量名非常混乱,并且没有使用
严格
警告
。但它仍然应该起作用。当然,
*
不是有效的文件名。查看内置的
glob
以获取文件夹中的文件列表。你只是想分享一些经验而不是提问吗?他使用的是字符串
“*”
,而不是glob
glob“*”
。我只想从目录中获取所有文件名,并删除那些包含我在数组中模式的文件,我的代码不起作用,我需要正确的解决方案我不明白你的问题是什么。您的变量名非常混乱,并且没有使用
严格
警告
。但它仍然应该起作用。当然,
*
不是有效的文件名。查看内置的
glob
以获取文件夹中的文件列表。你只是想分享一些经验而不是提问吗?他使用的是字符串
“*”
,而不是glob
glob“*”
。我只想从目录中获取所有文件名,并删除那些包含我在数组中模式的文件,我的代码不起作用,我需要正确的sol