2011-11-06 64 views
-1

我想在perl中創建一個簡單的grep調用。 我有2個變量。 $ VAR1,$ VAR2 ,我想所有的文件名與$ var1的啓動和文件的結尾是$ VAR2 這將是對Perl中的grep命令,做的是語法的文件。perl簡單grep

回答

1

獲取與$var1開始和$var2結束在當前目錄中的所有文件名:

my @matchingFileNames = <$var1*$var2>; 

編輯:要處理空格和特殊字符作爲@Schwern和@ikegami正確地指出:

my @matchingFileNames = <\Q$var1\E*\Q$var2\E>; 
+2

如果'$ var1'或'$ var2'包含'*'或'''或其他東西,它會被shell解釋給出錯誤的結果。必須先用'quotemeta'引用$ var1和$ var2。 – Schwern

+1

或者如果他們包含一個空間(更常見) – ikegami

0
opendir(DIR, "yourDIR"); 
my @FILES= readdir(DIR); 
my @matching_files; 

for my $file (@FILES) { 
    push(@matching_files, $file) if ($file =~ /\A$var1/ and $file =~ /$var2\z/) 
} 
+1

,對於循環是寫'我@matching_files = {grep的時間越長,速度較慢的方式m {\ A $ var1}和m {$ var2 \ z}} @ files'。 – Schwern

1

喜歡的東西:

my @files = grep {/\A$var.*$var2\z/} @input_files 

會做

+0

或者你可以分解它,這將使它更容易閱讀(和更快):'my @files = grep {//A $ var1/&&/$ var2 \ z /} @input_files;' – stevenl

+0

Use // i修飾符,還有\ Q ... \ E,文件名可能有點(。)或其他正則表達式元素。 – snoofkin