0

我有一个快速的问题..

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

例如。这是我的输入:

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或一个或多个大写字母的任何其他变体。

但是,当我这样做时,我只会得到这个:

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

任何帮助都会很棒。我知道我只是在告诉程序打印“已捕获”,但我不知道如何让它打印文件的其余部分并将线条啜饮到所需的位置。

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

4

1 回答 1

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通话。

于 2013-07-23T17:10:08.977 回答