2013-07-23 109 views
0

我有一個快速的問題..多行匹配PERL

我想匹配一個特定的多線程實例。問題是,當我執行我的代碼時,它只打印我編輯的內容,而不是整個文件。

例如。這是我輸入:

JJJ 
1234   123.00  1234.28    123456.00  1234567.72 constant 
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc. 

我的目標是獲得:

JJJ 1234   123.00  1234.28    123456.00  1234567.72 constant 
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc. 

所以基本上我只是想與JJJ或1倍或更大的資本任何其他變化來發出聲音的數據到行字母。

然而,當我這樣做,我只得到這樣的:

JJJ 1234   123.00  1234.28    123456.00  1234567.72 constant 

我只得到這一點,只是,而不是其他的信息,我需要的文件中。我知道有一個簡單的解決方案,但我是perl非常新,並不能完全弄清楚。

這是我的代碼,也許你們中的一些人會有建議。

use File::Slurp; 
my $text = read_file('posf.txt'); 
while ($text =~ /(^[A-Z]+)(\d+.*?\.\d+ Acquired$)/gism) { 
$captured = $1." ".$2; 
$captured =~ s/\n//gi; 

print $captured."\n"; 
} 

任何幫助將是偉大的。我知道我只是告訴程序打印「抓取」,但我無法弄清楚如何讓它打印文件的其餘部分,並將線路放到所需的位置。

我希望我的問題有意義,不難理解,請告知我是否可以進一步查詢。

+0

你能寫出儘可能最小的例子來重現你的錯誤嗎?目前,您在正則表達式中使用單詞「Acquired」,而您的數據中缺少該單詞。 – user4035

+0

即時通訊對不起。....讓我重新發布代碼..我打算切換到常數.. – joshE

+0

使用File :: Slurp; my $ text = read_file('posf.txt'); ($ text =〜/(^[A-Z]+)(dd+.*?\.d + constant $)/ gism){$ text =〜1。「」。$ 2; $($ text =〜/(^[-)) $ captured =〜s/\ n // gi; print $ captured。「\ n」; } – joshE

回答

0

希望我能正確理解你的問題:你想在文本中的每行之後刪除換行符,只包含大寫字母。試試這個代碼:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $text = qq{JJJ 
1234   123.00  1234.28    123456.00  1234567.72 constant 
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc. 
JJJ 
1234   123.00  1234.28    123456.00  1234567.72 constant 
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc. 
}; 

$text =~ s/(^[A-Z]+) #if the line starts with at least 1 capital letter 
     \r?   #followed by optional \r - for DOS files 
     \n$/   #followed by \n 
     $1 /mg;  #replace it with the 1-st group and a space 
print $text; 

它打印:

JJJ 1234   123.00  1234.28    123456.00  1234567.72 constant 
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc. 
JJJ 1234   123.00  1234.28    123456.00  1234567.72 constant 
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc. 

我沒有從文件中讀取文本顯示測試數據。但您可以輕鬆地添加read_file呼叫。

+0

謝謝..我只是需要弄清楚如何使用這個模塊,而不會丟失我的文件的其餘部分...似乎s /訣竅!謝謝! – joshE