1

行が * で始まる場合でも、私のコードは範囲を抽出しようとします これが私のコードです:

while (<FILE1>) {

    $_ =~ s/^\s+//; #remove leading spaces
    $_ =~ s/\s+$//; #remove trailing spaces

    if (/IF/ .. /END-IF/) {

        if($_ =~ m/END-IF/) {

            $flag = 1;
        }
        print FINAL "$_\n";

        if ($flag == 1) {

            $flag = 0;
            print FINAL "\n\n";
        }
    }
}
close FINAL;
close FILE1;

FINAL 出力ファイルには、\n\n で区切られたすべての IF と END-IF の間の範囲のみが含まれている必要があります。また、IF ブロック内に IF がある場合、最初の if から 2 番目の IF の前の行までの範囲は次のようになります。 \n\n で区切られた FINAL に保存されました

4

3 に答える 3

2

IFとEND-IFを除外する場合は、以下を使用します。

perl -lne 'if(/IF/.../END-IF/ and $_!~/^\*|IF|END-IF/){print}' your_file

IFとEND-IFを含める場合は、以下を使用します。

perl -lne 'if(/IF/.../END-IF/ and $_!~/^\*/){print}' your_file
于 2012-09-17T06:17:58.420 に答える
0

次の行を追加すると、私の問題が解決しました:)

next if(/^\*/);
于 2012-09-17T05:41:21.210 に答える
0

おそらく、次のことが役立ちます。

use strict;
use warnings;

while (<DATA>) {
    if ( /IF/ .. /END-IF/ ) {
        next if /^\*|IF|END-IF/;
        print;
    }
}

__DATA__
This is a line.
And another line...
IF
1. A line within the if
* 2. An asterisk line within the if
3. And now, another line within the if
END-IF
Outside an if construct.
Still outside the if construct.
IF
4. A line within the if
* 5. An asterisk line within the if
6. And now, another line within the if
END-IF

出力:

1. A line within the if
3. And now, another line within the if
4. A line within the if
6. And now, another line within the if

範囲内の行IF .. END-IFは条件付きで渡され、または で始まっていないか、どちらも含まれていない場合にのみ出力され*ます。IFEND-IF

于 2012-09-17T05:47:21.003 に答える