2013-04-05 55 views
0

我正在尝试编写一个Perl脚本,它将执行以下操作:
1.打开一个文件,其中每行包含多个文件的位置(说文件A,文件B )
2.请在每个文件的egrep的类似egrep的“模块|输入|输出”
3.将使用相同的文件名A,B等,但在不同的目录中的egrep的输出)Shell命令对文件的每一行

egrep有更多限制,但我可以稍后添加它们。

我的问题是我该如何做第2步和第3步?在哪里,我在我的Perl脚本打开的文件的每一行执行一个shell命令。而文件的位置将是,例如,design/rtl/name.v和我想的egrep的结果存储在design/fake/name.v

+4

为什么用perl模式做什么真的应该是一个shell脚本? – 2013-04-05 07:57:00

+0

如上所述,它更像是一个shell脚本问题,但它可能会更好地使用Perl自己的文件读取和搜索功能,而不是调用'egrep'。 – 2013-04-05 08:04:16

回答

1

遍历文件名是这样的:

while read file 
do 
    egrep "module|imput|ouput" "$file" > "/another/directory/${file##*/}" 
done < fileList.txt 
2

在外壳(bash)的创建一个目录结果并列出一个文件到文件“列表”一条线,然后就在bash中键入此直提示

for i in `cat list`;do egrep "string" $i > result/grep${i}; done 

这里是在Perl相似。错误行为更好,它可能会快一点:真正的优势是可以更容易地添加额外的行为。将其保存为一个文件并运行为“perl脚本列表富”,其中的脚本是脚本的文件名,目录是文件和Foo列表的文件名正在搜索

#!/usr/bin/perl 
# 

my ($file, $pattern) = @ARGV; 

open(my $fh, $file) || "die $! $file\n"; 

while (<$fh>) { 
    chomp; #trim newline from filename 
    my $togrep = $_; 
    open(my $grepfh, $togrep) || warn "$togrep $!"; 
    if ($grepfh) { 
     open(my $output, ">result/$togrep") || die "$togrep $!"; 
     while (grep($pattern, <$grepfh>)) { 
      print $output $_; 
     } 
    } 
}