3

一致する 2 つのパターンの間にある行を抽出する perl プログラムを作成しています。たとえば、次のテキスト ファイルには 6 行あります。ロードバランサーとエンドをマッチングさせています。間にある4行を取得したい。

**load balancer** 
new 
old
good
bad
**end**

私の質問は、ロード バランサーとエンドの間の行を配列に抽出する方法です。どんな助けでも大歓迎です。

4

4 に答える 4

7

フリップフロップ演算子を使用して、マーカーの間にいることを通知できます。実際のマーカーも含まれるため、データ コレクションからそれらを除外する必要があります。

複数のレコードがある場合、これによりすべてのレコードがマッシュアップされることに注意してください。その場合は、@array何らかの方法で保存してリセットする必要があります。

use strict;
use warnings;

my @array;
while (<DATA>) {
    if (/^load balancer$/ .. /^end$/) {
        push @array, $_ unless /^(load balancer|end)$/;
    }
}

print @array;

__DATA__
load balancer
new 
old
good
bad
end
于 2011-12-08T18:38:05.800 に答える
0

このようなファイルの場合、レコード区切り記号 ($/または$RSからEnglish)を変更することがよくあります。

use English qw<$RS>;
local $RS = "\nend\n";

my $record = <$open_handle>;

あなたがchompそれをするとき、あなたはその行を取り除きます。

chomp( $record );
于 2011-12-08T20:06:20.960 に答える