簡體   English   中英

Perl中多個“ START”模式期間的觸發器用法

[英]Flip flop usage during multi “START” pattern in Perl

我有一個Test.txt文件,如下所示:

some data1 func-name1 SECTION.
data to be extracted
data to be extracted
some data2 func-name2 SECTION.
data to be extracted
data to be extracted
func-name2-EXIT. EXIT.

現在,我正在使用觸發器運算符提取范圍,即我的START = SECTION。 和END = -EXIT。 出口。 如下:

open FILE1, "<Test.txt" 
    or die "Cannot open File1.txt!";

open FINAL, ">Final.txt" 
    or die "Cannot open Finall.txt!";

my $START = 'SECTION.';
my $END   = '-EXIT EXIT.';

while (<FILE1>) {
    if (/$START/ .. /$END|$START/) {

        if ($_ =~ m/$END|$START/) {
            $flag = 1;
        }

        print FINAL $_;

        if ($flag == 1) {          
            print FINAL "\n\n";
            $flag = 0;
        }
    }
}
close FINAL;
close FILE1; 

我正在嘗試做的是,我需要在下一節之間使用兩行作為分隔符 范圍也是如此,我的Final.txt應該如下所示:

some data1 func-name1 SECTION.
data to be extracted
data to be extracted


some data2 func-name2 SECTION.
data to be extracted
data to be extracted
func-name2-EXIT. EXIT.

請指導我。

您不需要觸發器:

#!/usr/bin/env perl
use strict;
use warnings;

my $first = 0;

while (<DATA>) {
    print /SECTION/ && $first++ ? "\n\n$_" : $_;
}

__DATA__
some data1 func-name1 SECTION.
data to be extracted
data to be extracted
some data2 func-name2 SECTION.
data to be extracted
data to be extracted
func-name2-EXIT. EXIT.

我用$first計數部分,以確保在第一部分之前沒有插入換行符,但是如果第一部分從第一行開始,則可以使用特殊變量$. 並將$first++替換$first++ $. > 1 $. > 1

表達式/SECTION/ && $first++的第一部分針對每一行進行評估。 /SECTION/$_ =~ /SECTION/簡寫,這意味着如果未找到字符串SECTION則該行按原樣打印( $_ )。

如果找到SECTION則將評估$first++ 請注意,使用后綴增量是因為我們希望$first對於第一部分的求值為0false ),以便它按原樣打印( $_ ),並且兩個換行符僅位於后面的部分( "\\n\\n$_" )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM