> On Aug 23, 2016, at 12:19 PM, Robert Dahlem <robert.dah...@gmx.net> wrote:
> 
> my $instre = qr{(?x)
>        \A                      # Absolute line start
>        (?:\S+ \s+){3}          # Timestamp, adjust for other time formats
>        \S+ \s+                 # Hostname
>        (postfix(?:-\S+)?)/     # postfix instance
>        };
> 
> [...]
> 
> I would like to have postfix and postfix_slow in one block, while
> postfix-sec and postfix_slow-sec in another block. Could someone help me
> modify this part of the regular expression:
> 
>       (postfix(?:-\S+)?)/ # postfix instance
> 
> so that it spits out "postfix" and "postfix-sec" while deleting the
> "_slow" part? Much appreciated!

Untested:

my $instre = qr{(?x)           # Ignore whitespace and comments
       \A                      # Absolute line start
       (?:\S+ \s+){3}          # Timestamp, adjust for other time formats
       \S+ \s+                 # Hostname
       (postfix(?:-\S*?)?)     # Capture instance name with optional non-greedy 
suffix
       (?:_slow)?              # Optional ignored "_slow" suffix
       /                       # '/' before the daemon program name
       };

A more general approach may be to replace "_slow" with "/slow" and
ignore any additional / delimited components between the instance
name and the program name.  That would require you to set a syslog_name
along the lines of postfix-sec/slow or postfix-sec/submission, ...

and the RE then becomes (untested):

my $instre = qr{(?x)           # Ignore whitespace and comments
       \A                      # Absolute line start
       (?:\S+ \s+){3}          # Timestamp, adjust for other time formats
       \S+ \s+                 # Hostname
       (postfix(?:-[^/\s]+)?)  # Capture instance name stopping before first '/'
       (?:/\S+)*               # Optional non-captured '/'-delimited qualifiers
       /                       # Final '/' before the daemon program name
       };

-- 
        Viktor.

Reply via email to