Ich lese eine ähnliche Frage an (How can I print all the lines between the previous and next empty lines when a match is found?)! und versuchte, alle Zeilen zwischen leeren Zeilen zu drucken, aber es wird nicht gedruckt. Hier ist das Skript, das ich ausprobiert habe, bitte korrigieren Sie es, um für meine Anforderung zu arbeiten.Perl-Skript zum Drucken von Zeilen zwischen leeren Zeilen
my @file = <IN>;
for (0 .. $#file) {
if ($file[$_] =~ /Match/){
my $start = $_;
while ($start >= 0 && $file[$start] !~ /^$/) {
$start--; # $start points to first empty line
}
my $end = $_;
while ($end <= $#file && $file[$end] !~ /^$/) {
$end++; # $end points to next empty line
}
print OUT "\[email protected][$start+1..$end-1]"; #it should print between two empty lines right??
}
}
Eingabedatei:
wire enable,GSMC_G8,mkf_g,un1_G11_0, GND_net_1, VCC, G8, G16, Q_RNIUQAA, CK_c, reset_c,
G0_c, G1_c, G17_c, G2_c, G3_c, G17_c_i, GND_1, VCC_0;
INBUF G3_pad (.PAD(G3), .Y(G3_c));
dff_0_1 DFF_1 (.G17_c(G17_c), .reset_c(reset_c), .CK_c(CK_c),
.G0_c(G0_c), .G8(G8));
GND GND_i_0 (.Y(GND_1));
NOR2 G3_pad_RNIUUQF (.A(G8), .B(G3_c), .Y(G16));
INV G17_pad_RNO (.A(G17_c), .Y(G17_c_i));
VCC VCC_i (.Y(VCC));
CLKBUF CK_pad (.PAD(CK), .Y(CK_c));
endmodule
Ausgabedatei benötigt:
INBUF G3_pad (.PAD(G3), .Y(G3_c));
dff_0_1 DFF_1 (.G17_c(G17_c), .reset_c(reset_c), .CK_c(CK_c),
.G0_c(G0_c), .G8(G8));
GND GND_i_0 (.Y(GND_1));
NOR2 G3_pad_RNIUUQF (.A(G8), .B(G3_c), .Y(G16));
INV G17_pad_RNO (.A(G17_c), .Y(G17_c_i));
VCC VCC_i (.Y(VCC));
CLKBUF CK_pad (.PAD(CK), .Y(CK_c));
Fügen Sie bitte eine Beispiel-Eingabedatei und die gewünschte Ausgabe ein. Sie können Ihre Frage bearbeiten. – simbabque
Verwenden Sie bitte auch "strict" und "use warnings". In Ihrem Code gibt es mehrere Syntaxprobleme. Mathematische Operatoren werden nicht in Strings interpoliert. Ihre 'print'-Anweisung tut nicht das, was Sie denken. – simbabque
Um Verilog zu analysieren: https://metacpan.org/pod/Verilog-Perl – toolic