2014-04-25 104 views
0

我試圖替換用perl命令行多塊。 文如下:perl的命令行多正則表達式替代

@LNCaP.2622 GAPC:1:1:4519:1350 length=76 
TTTCCATTGCAGGTTTTAAAGTGGAGATTCTGAAGGGGAAAATAGGCACTGTCAGAACAAAGCTACCTGGAAACAG 
+LNCaP.2622 GAPC:1:1:4519:1350 length=76 
[email protected]:[email protected]:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B################# 
@LNCaP.2623 GAPC:1:1:4767:1343 length=76 

+LNCaP.2623 GAPC:1:1:4767:1343 length=76 

@LNCaP.2624 GAPC:1:1:4794:1349 length=76 

,我試圖運行下面的正則表達式:

perl -pe "s/^@.*\n\s*\n+//mg" test.txt 

希望得到以下的輸出:

@LNCaP.2622 GAPC:1:1:4519:1350 length=76 
TTTCCATTGCAGGTTTTAAAGTGGAGATTCTGAAGGGGAAAATAGGCACTGTCAGAACAAAGCTACCTGGAAACAG 
+LNCaP.2622 GAPC:1:1:4519:1350 length=76 
[email protected]:[email protected]:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B################# 
@LNCaP.2624 GAPC:1:1:4794:1349 length=76 

正則表達式^@.*\n\s*\n\+.*\n\s*\n識別4線我想用上面的文字刪除regex101.com,然而,當我從我的shell中運行命令時,輸出不變:(

我不能使用行號,因爲這是從更大的文件中提取的,這意味着這必須應用於與該模式匹配的所有4個行實例。

任何想法,我究竟做錯了什麼?

感謝

回答

3

perl -pe一行處理呢線。因此,使用跨行的正則表達式默認情況下永遠不會匹配。

您可以更改input record separator $/雖然,啜整個文件,並應用正則表達式是:

perl -pe "BEGIN { undef $/ } s/^@.*\n\s*\n+//mg" test.txt 

你上面建議不提供你想要雖然輸出的正則表達式。要做到這一點,你需要下面的表達式:

perl -pe "BEGIN {undef $/} s/^@.*\n\s*\n(?:(?!\@).*\n)*//mg" text.txt 

輸出:

@LNCaP.2622 GAPC:1:1:4519:1350 length=76 
TTTCCATTGCAGGTTTTAAAGTGGAGATTCTGAAGGGGAAAATAGGCACTGTCAGAACAAAGCTACCTGGAAACAG 
+LNCaP.2622 GAPC:1:1:4519:1350 length=76 
[email protected]:[email protected]:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B################# 
@LNCaP.2624 GAPC:1:1:4794:1349 length=76 
+0

+1'民主基金$ /'。 – slayedbylucifer

+0

也''perl -MData :: Dumper -0777 -E'say Dumper $ /'' –

0

Miller是正確的,他的回答。您必須將文件的全部內容讀取到變量中,並對其應用正則表達式。嘗試下面的代碼,我讀了啜食模式的內容和使用負字符類[^\n]*匹配每一行,並\n{2,}匹配空行:

#!/usr/bin/env perl 

use strict; 
use warnings; 

my $text = do { undef $/; <DATA> }; 
$text =~ s/^@(?:[^\n]*\n{2,}){2}//mg; 
print $text; 


__DATA__ 
@LNCaP.2622 GAPC:1:1:4519:1350 length=76 
TTTCCATTGCAGGTTTTAAAGTGGAGATTCTGAAGGGGAAAATAGGCACTGTCAGAACAAAGCTACCTGGAAACAG 
+LNCaP.2622 GAPC:1:1:4519:1350 length=76 
[email protected]:[email protected]:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B################# 
@LNCaP.2623 GAPC:1:1:4767:1343 length=76 

+LNCaP.2623 GAPC:1:1:4767:1343 length=76 

@LNCaP.2624 GAPC:1:1:4794:1349 length=76 

運行它想:

perl script.pl 

國債收益率:

@LNCaP.2622 GAPC:1:1:4519:1350 length=76 
TTTCCATTGCAGGTTTTAAAGTGGAGATTCTGAAGGGGAAAATAGGCACTGTCAGAACAAAGCTACCTGGAAACAG 
+LNCaP.2622 GAPC:1:1:4519:1350 length=76 
[email protected]:[email protected]:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B################# 
@LNCaP.2624 GAPC:1:1:4794:1349 length=76