对perl数组使用诸如grep和sed之类的unix命令
如何在perl数组中grep某些模式,并使用sed命令将输出保存为另一个数组,如下面的数组对perl数组使用诸如grep和sed之类的unix命令,perl,unix,sed,grep,Perl,Unix,Sed,Grep,如何在perl数组中grep某些模式,并使用sed命令将输出保存为另一个数组,如下面的数组 my @modifiedfiles=`echo @files | grep -E '(DataFiles|Pfgas|Startups)' | sed -e 's/.*something//g; s/#.*$//g;'` 请不要,只使用buildin Perl函数: @modifiedfiles = map({ s/.*something//g; s/#.*$//g; } grep({
my @modifiedfiles=`echo @files | grep -E '(DataFiles|Pfgas|Startups)' | sed -e 's/.*something//g; s/#.*$//g;'`
请不要,只使用buildin Perl函数:
@modifiedfiles = map({
s/.*something//g;
s/#.*$//g;
} grep({
/DataFiles|Pfgas|Startups/
} @files));
你没有——这毫无意义:) 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;
}
使用IPC::Open2;
$pid=open2(\*CHLD\u输出,\*CHLD\u输入,
“grep-E'(数据文件| Pfgas | Startups)| sed-E的/*something//g;s/#*$//g;”
);
对于我的$file(@files){
打印CHLD_OUT$文件。“\n”;
我的$result_fn=;
chomp$result\u fn;
推送@modifiedfiles,$result\u fn;
}
不,你不想这样:)它有很多缺点,失败的风险很高。我假设如果正则表达式中的
grep
过滤掉一个文件,脚本甚至会开始阻塞;标记为,我得到这个错误!这是一个很好的答案,需要一步一步地重新确认和确认。指向文档+1:-)的链接可能值得一提的是@filteredfiles的内置功能s/*something//g