2014-04-25 60 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