如何在一個perl陣列用grep某些圖案和用sed命令和輸出保存爲另一個陣列,如下面一個使用UNIX命令,如grep和sed用於Perl陣列
my @modifiedfiles=`echo @files | grep -E '(DataFiles|Pfgas|Startups)' | sed -e 's/.*something//g; s/#.*$//g;'`
如何在一個perl陣列用grep某些圖案和用sed命令和輸出保存爲另一個陣列,如下面一個使用UNIX命令,如grep和sed用於Perl陣列
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;
但是皮爾斯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;
}
不,你不」不想這樣:)它有很多缺點和高失敗的風險。如果grep
過濾掉了一個文件,我認爲腳本甚至會開始阻止。
這是一個很好的答案,一步一步的記憶和。鏈接到文檔+1 :-) – andlrc
謝謝! @Sebastian :) – no1
可能值得一提的是就地功能'/.* // //用於@ filteredfiles' – Sobrique