Thread Zeilensprung in einer Ausgabe (15 answers)
Opened by Gast at 2008-11-18 14:19

Linuxer
 2008-11-18 14:58
#116360 #116360
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Das hier ist eine mögliche Lösung:

Es wird block-/abschnittsweise eingelesen und der vordefinierte Regex auf den Block angewandt. Dabei ist zu beachten, dass die Modifier /x und /s verwendet werden.

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
52
53
54
55
56
57
58
#!/usr/bin/perl
use strict;
use warnings;

my ( $sp, $port ) = qw( A 5 );

# perldoc perlretut; perldoc perlrequick; perldoc perlre
my $regex = qr{

        SP\sName:\sSP\s\Q$sp\E          \s+
        SP\sPort\sID:\s\Q$port\E        \s+
        .*
        Link\sStatus:\s(\S+)            \s+
}sx;

{
        # perldoc perlvar
        local $/ = "\n\n";

        while ( my $block = <DATA> ) {

                if ( $block =~ $regex ) {
                        print "Link Status: $1\n";
                }
        }
}

__DATA__

SP Name: SP A
SP Port ID: 4
SP UID: 50:06:01:60:C1:E0:2B:7A:50:06:01:60:41:E0:2B:7A
Link Status: Up
Port Status: Online
Switch Present: YES
Switch UID: 10:00:00:05:1E:03:D9:16:20:07:00:05:1E:03:D9:16
SP Source ID: 67328
MAC Address: Not Applicable
SFP State: Online
Reads: 3064353
Writes: 17936913
Blocks Read: 103971645
Blocks Written: 867380028
Queue Full/Busy: 0

SP Name: SP A
SP Port ID: 5
SP UID: 50:06:01:60:C1:E0:2B:7A:50:06:01:61:41:E0:2B:7A
Link Status: Down
Port Status: Online
Switch Present: NO
MAC Address: Not Applicable
SFP State: Online
Reads: 0
Writes: 74801
Blocks Read: 0
Blocks Written: 19186170
Queue Full/Busy: 0
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Zeilensprung in einer Ausgabe