有选择地在目录和子目录中包含文本“some_attr”的所有**。dat文件上运行perl脚本

时间:2014-07-09 17:56:01

标签: perl awk sed scripting grep

我想在指定目录中包含文本 " some_attr" 的所有 .dat 文件上运行perl脚本及其子目录。我怎样才能做到这一点? 我可以使用&#列出所有包含 " some_attr" .dat文件39; *** grep -nri some_attr * ./&# 39; * 并在greped文件上手动运行perl脚本,但我想使用perl

自动执行此操作

2 个答案:

答案 0 :(得分:1)

假设你有一个Bash shell,你可以使用一个简单的for循环和grep:

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

答案 1 :(得分: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";
}