Thread Match Pattern über mehrere Zeilen (3 answers)
Opened by bora99 at 2020-11-13 23:11

bora99
 2020-11-13 23:11
#192965 #192965
User since
2009-12-05
54 articles
BenutzerIn
[default_avatar]
Hallo,

in einem Script habe ich folgenden Vorschlag für Suche in einer Datei mit Zeilen mit 1. "(" und 1. ")"

- Die Zeichen "(" , ")" können an einer beliebigen Stelle sich befinden,
dahinter ein Pattern

Erstellung Testfile

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
cat > testfile <<-EOF
( START
zeile2
zeile3
) ENDE
zeile5
( NÄCHSTE
zeile7
zeile8
) ENDE
EOF


Ergebnis:

( START
zeile2
zeile3
) ENDE

Versucht habe ich in Script den Code
Code (perl): (dl )
if (/BEGIN PATTERN/ .. /END PATTERN/) {

aber nur mit dem Script bin ich zum Ergebnis gekommen.
Ergebnis soll gespeichert werden in einem Array.
Es funktioniert wahrscheinlich besser ? Aber soll kein One Liner sein

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/perl -w

my $TestFile = "testfile";
my $found1 = 0;
my $found2 = 0;
my %found_arr = ();
my $i = 0;

if( ! open( TFH, $TestFile))
  {
  print STDERR "Test File '$TestFile' kann nicht gelesen werden !\n";
  exit 1;
  }

while( $line = <TFH> )
   {
   chomp $line;
    if( ( $line =~ m/^\s*([\x28])/i ) && ( ! $found1 ) )
      {
      $found_arr[$i]=$line;
      $i++;
      $found1 ++;
      }
      if( ( $found1 ) && ( ! $found2 ) )
        {
        if( ! $found2 )
          {
          if( ( $line !~ m/^\s*([\x28])/i ) && ( $line !~ /\Q)/ ) )
            {
            $found_arr[$i]=$line;
            $i++;
            }
            else
            {
            if( $line =~ /\Q)/ )
              {
              $found2 ++;
              $found_arr[$i]=$line;
              $i++;
              }
            }
          }
        }
   }
close( TFH);

for( $i = 0; $i <= $#found_arr; $i++)
  {
  print "$found_arr[$i]\n";
  }
exit 0;

Last edited: 2020-11-13 23:12:49 +0100 (CET)

View full thread Match Pattern über mehrere Zeilen