2013-04-05 54 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 $_; 
     } 
    } 
}