2014-05-16 82 views
-1

我需要創建一個perl腳本,該腳本將搜索給定目錄並查找包含特定字符串的所有txt文件。我想要perl腳本然後打印這些文件的位置。到目前爲止,我已經完成了這項任務,但我想爲腳本添加更多功能。搜索目錄中包含特定字符串和打印位置的文件

這是我到目前爲止有:

#!/usr/bin/perl 
use strict; 
use warnings; 
use File::Find; 

my $dir ='C:\path\to\dir'; 
my $keyword = "apple"; 


find(\&txtsearch, $dir); 

sub txtsearch { 

    if(-f $_ && $_ =~ /\.txt$/) { 
     open my $file, "<", $_ or do { 
      warn qq(Unable to open "$File::Find::name": $!); #checks permissions 
      return; 
     }; 

     while(<$file>) { 
      if (/\Q$keyword\E/) { 
       print "$File::Find::name\n"; #prints location of file 
       return; #stops searching once found    
      } 
     } 
    } 
} 

現在我想添加幾件事情:首先 ,我想包括一種方法,在搜索中包含大小寫。例如,如果我想查找單詞「apple」的所有實例,我不希望它忽略「Apple」或「APPLE」的任何用法。

我也想成爲蘋果在命令行輸入關鍵字,而不是實際的腳本本身。

另外,是否有可能讓腳本在名爲「output.txt」的指定目錄中創建一個文件,並將腳本的輸出導入到該文件中?我知道一個命令行,你必須有> output.txt,但我不完全確定如何在腳本中實現它。

最後,如果我可以在文件中包含字符串出現次數的打印輸出,那將會很好。例如,如果單詞「蘋果」在文本文件中出現5次,我希望看到文件位置的輸出,並且還有類似「蘋果在FILE.txt中出現5次」的內容

感謝你這麼多的幫助!

+1

我發現短語「到目前爲止,我已經完成了這項任務」,再加上perl 101個問題,以及腳本中使用的內建和關鍵字,它們既可疑又有趣 – Gabs00

+2

一方面,您因嘗試查找而受到讚揚一個你想要的東西的腳本。另一方面,誠實地承認你找到了別人的腳本,但不明白它是如何工作的,因此無法理解如何添加即使是最基本的功能也會產生更多的善意和更少的負面反應。 – DVK

+0

我很抱歉,我的意思並不是暗示我自己寫了整個劇本,而是借用了幾個完成相同內容的劇本的屬性。我的問題是基於更多關於修改腳本並添加更多功能的問題。我是一個完整的新手,並希望學習Perl,我理解非常基礎知識,但通過實例學習。任何腳本部分的任何功能的解釋將不勝感激。非常感謝,如果我錯了! – user3646369

回答

0

首先,我想介紹一種在搜索中包含大寫的方法。例如,如果我想查找單詞「apple」的所有實例,我不希望它忽略「Apple」或「APPLE」的任何用法。

添加i修改到你的正則表達式

參考perldoc perlre

我也想成爲蘋果輸入命令行的關鍵詞而不是實際的腳本本身。

使用GetOpt::Long模塊進行命令行參數處理。

參考GetOpt::Long

此外,將有可能使用該腳本中創建一個名爲「output.txt的」指定目錄下的文件,並有腳本導入的輸出成?我知道一個命令行,你必須有> output.txt,但我不完全確定如何在腳本中實現它。

打開使用open(my $output_filehandle, ">", "output.txt") or die "Can not open file for writing: output.txt. $!"

然後用print $output_filehandle <STUFF>替換print <STUFF>寫入的文件。

參考perldoc openTutorial on opening things in Perl on Perldoc

最後,這將是很好,如果我能有串的許多事件是如何在文件中的打印輸出。例如,如果單詞「蘋果」在文本文件中出現5次,我希望看到文件位置的輸出,並且還有類似「蘋果在FILE.txt中出現5次」的內容

保留計數器變量而不是在第一次命中後返回。然後在文件行循環結束後打印文件名和計數器。

參考:對編程和循環的基本理解,根本不涉及Perl。

相關問題