[英]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
對於第一部分的求值為0
( false
),以便它按原樣打印( $_
),並且兩個換行符僅位於后面的部分( "\\n\\n$_"
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.