多线匹配PERL

时间:2013-07-23 15:34:49

标签: perl multiline fileslurp

我有一个简单的问题..

我正在尝试匹配特定的多线程实例。问题是当我执行我的代码时,它只打印我编辑的内容而不是整个文件。

例如。这是我的意见:

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";
}

任何帮助都会很棒。我知道我只是告诉程序打印“捕获”但我无法弄清楚如何打印文件的其余部分并将线条扯到所需的位置。

我希望我的问题有道理并且不难理解,如果我可以进一步询问,请告诉我。

1 个答案:

答案 0 :(得分: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来电。