我正在尝试使用perl命令行替换多行块。 文字如下:
@LNCaP.2622 GAPC:1:1:4519:1350 length=76
TTTCCATTGCAGGTTTTAAAGTGGAGATTCTGAAGGGGAAAATAGGCACTGTCAGAACAAAGCTACCTGGAAACAG
+LNCaP.2622 GAPC:1:1:4519:1350 length=76
DD@:BBBBDDD@D: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
DD@:BBBBDDD@D:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B#################
@LNCaP.2624 GAPC:1:1:4794:1349 length=76
正则表达式^@.*\n\s*\n\+.*\n\s*\n
使用上面的文本识别我要在regex101.com上删除的4行,但是,当我从shell运行命令时,输出不变:(
我无法使用行号,因为这是来自更大文件的摘录,这意味着必须将其应用于与该模式匹配的所有4个行实例。
知道我做错了什么?
感谢
答案 0 :(得分: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
DD@:BBBBDDD@D:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B#################
@LNCaP.2624 GAPC:1:1:4794:1349 length=76
答案 1 :(得分:0)
Miller在答案中是正确的。您必须将文件的整个内容读取到变量并对其应用正则表达式。尝试使用以下代码,我在slurp模式下阅读内容,并使用负字符类[^\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
DD@:BBBBDDD@D: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
DD@:BBBBDDD@D:B::=:6:(6//;589444004':839>>2;;:':>>:7B:><B<B#################
@LNCaP.2624 GAPC:1:1:4794:1349 length=76