2014-07-09 39 views

回答

1

假設你有一個Bash shell中,你可以使用一個簡單的for循環使用grep結合:

for file in `grep -lr some_attr | uniq` 
do 
    perl script_name.pl $file 
done 
+0

我試過,但有些文件有多次出現的some_attr,並且它多次運行 – user3814771

+0

您可以將grep的結果傳遞給'uniq'以僅一次獲取文件名。 –

+0

-l被定義爲只打印一次文件的名稱,所以要麼你有一個壞的grep或其他的東西出錯了。 –

1

您可以使用File::FindFile::Find::Rule

use strict; 
use warnings; 
use autodie; 

use File::Find::Rule; 

# find all the .dat files in . 
my @files = File::Find::Rule->file() 
          ->name('*.dat') 
          ->in('.'); 

for my ($file) { 
    my $data = do { 
     open my $fh, '<', $file; 
     local $/; 
     <$fh>; 
    }; 

    next if $data !~ /some_attr/; 

    print $file, "\n"; 
} 
+0

所以我必須更換打印$文件,「\ n」;用我的perl腳本。例如perl -i_ myscript.pl $文件 – user3814771

+0

你可以這樣做。或者你可以使用這種類型的邏輯來編輯你的perl腳本。我不知道這是一次性操作,還是您希望perl腳本永久具有此功能。 – Miller

相關問題