2014-10-31 62 views
0

我正在嘗試編寫一段由某些C代碼調用的代碼,並將數據文件和特定的單詞作爲參數傳入,並將行號輸出到stdout。我用$ substr玩過一些,但沒有成功。在Perl中讀取文本文件,搜索文字,返回行號

我認爲它最終會是這樣的:

if ($oneLineofTheData !~ theSearchWord){ 
    counter++; 
} 
else{ 
    output counter to stdout 
} 

這將是處理這種更簡單的方法?我將如何傳遞文件名和搜索詞?我對Perl非常陌生,所以提前感謝您的幫助。

謝謝,

回答

2

把這種在一個名爲whatever.pl文件:

$ct=0; 
while(<>) { 
    if ($_ =~ m/$ARGV[0]/) { 
    print $ct; 
    exit; 
    } 
    $ct++; 
} 

然後在命令行運行:

perl whatever.pl filename.txt wordToMatch 
+1

您可以通過使用'$ .'而不是縮短腳本'$ ct'。 ''_ _ =〜m/$ ARGV [0] /'可以縮寫爲'm/$ ARGV [0] /'。 – 2014-10-31 20:39:40

+0

啊,很好的電話@RenéNffeffegger。 – 2014-10-31 21:09:20

3

爲了將參數傳遞給一個Perl程序,使用@ARGV陣列。

要檢查字符串中是否存在子字符串,請使用index

$.保留最後訪問的文件句柄的行號。

#!/usr/bin/perl 
use warnings; 
use strict; 

my ($filename, $word) = @ARGV; 

open my $FH, '<', $filename or die $!; 
while (my $line = <$FH>) { 
    if (-1 != index $line, $word) { 
     print $.; 
     exit 
    } 
}