Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对perl数组使用诸如grep和sed之类的unix命令_Perl_Unix_Sed_Grep - Fatal编程技术网

对perl数组使用诸如grep和sed之类的unix命令

对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({

如何在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({ 
  /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;
但是Perls
grep
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