如何在perl数组中对某些模式进行grep并使用sed命令并将输出保存为另一个数组,例如下面的数组
my @modifiedfiles=`echo @files | grep -E '(DataFiles|Pfgas|Startups)' | sed -e 's/.*something//g; s/#.*$//g;'`
你没有-这没有道理:)
Perl具有grep
并map
内置:
my @filteredfiles = grep { /(DataFiles|Pfgas|Startups)/ } @files;
my @modifiedfiles = map { s/.*something//g; s/#.*$//g; $_ } @filteredfiles;
一步也可以:
my @modifiedfiles =
map { s/.*something//g; s/#.*$//g; $_ }
grep { /(DataFiles|Pfgas|Startups)/ } @files;
但是Perlsgrep
和map
行为与命令行grep
和map
。有关详细信息,请参见文档:
如果您确实想这样做,则可以通过以下方式进行:
use IPC::Open2;
$pid = open2(\*CHLD_OUT, \*CHLD_IN,
"grep -E '(DataFiles|Pfgas|Startups)' | sed -e 's/.*something//g; s/#.*$//g;"
);
for my $file (@files) {
print CHLD_OUT $file."\n";
my $result_fn = <CHLD_IN>;
chomp $result_fn;
push @modifiedfiles, $result_fn;
}
不,您不想这样做:)它有很多缺点,而且失败的风险很高。我认为如果grep
将文件过滤掉,脚本甚至会开始阻塞。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句