n0cturne
Goto Top

Groups aus RegEx in Variablen

Hallo zusammen,

ich habe es zumindest schon mal geschafft, eine Logzeile in einzelne Gruppen zu zerlegen:

Logzeile:

2022-08-08 16:00:03 - INFO - Backup of the database to /backup/2022-08-08-160003_db.sqlite3 was successful

Regex:

(?**<log_date_Y>**[0-9]{4})-(?**<log_date_M>**[0-9]{2})-(?**<log_date_D>**[0-9]{2}) (?**<log_time>**[0-9]{2}:[0-9]{2}:[0-9]{2})(\.[0-9]{1,3})? - (?**<log_level>**TRACE|DEBUG|INFO|NOTICE|WARN|WARNING|ERROR|SEVERE|FATAL) -.(?**<log_message>**.*)

Nun möchte ich die fett formatierten Werte/Gruppen gerne in Variablen umwandeln um diese dann in Shell-Skripten weiterzuverwenden - hab aber keinen blassen Schimmer wie.
Daher würde ich mich hier über Unterstützung freuen.

Viele Grüße
Benjamin

Content-ID: 3584982339

Url: https://administrator.de/forum/groups-aus-regex-in-variablen-3584982339.html

Ausgedruckt am: 25.12.2024 um 08:12 Uhr

3479126418
3479126418 08.08.2022 aktualisiert um 17:31:51 Uhr
Goto Top
sed und awk sind bspw. deine Freunde da kannst du Strings umbauen wie du lustig bist und brauchst.
 echo "2022-08-08 16:00:03 - INFO - Backup of the database to /backup/2022-08-08-160003_db.sqlite3 was successfull" | sed -re 's/^([^ ]+) ([^ ]+) - ([^ ]+) - (.*)/\1 # \2 # \3 # \4/'  
Aber Achtung, nicht alle Regex Konstrukte funktionieren überall, z.B. sind die named groups oft nicht im Standard Posix Regex supported.

Unter Windows, hier noch ein Beispiel mit Powershell
$data = '2022-08-08 16:00:03 - INFO - Backup of the database to /backup/2022-08-08-160003_db.sqlite3 was successfull'  
[regex]::matches($data,'(?im)^(?<date>[^ ]+) (?<time>[^ ]+) - (?<level>[^ ]+) - (?<message>.*)').Captures | %{  
    $datum = $_.Groups['date'].Value  
    $zeit = $_.Groups['time'].Value  
    $level = $_.Groups['level'].Value  
    $message = $_.Groups['message'].Value  
    "$datum # $zeit # $level # $message"  
}
n0cturne
n0cturne 08.08.2022 um 17:41:05 Uhr
Goto Top
Okay, danke. Gut zu wissen dass RegEx sich nicht überall gleich verhält.
Wie bekomme ich nun die Werte 1-4 in durch andere Befehle verwertbare Variablen? Shell/Regex und der Gleichenist noch recht neu für mich.
3479126418
Lösung 3479126418 08.08.2022 aktualisiert um 17:46:58 Uhr
Goto Top
S. Beispiel o. da du nicht sagst unter welchem OS Shell/Batch/PS, bei SED hast du die ja schon in Variablen zugreifbar über die Indexe der Subgroups \1 \2 \3 ... usw, Powershell s. ebenfalls oben.
Einfach mal die Manuals der Befehle rein pfeifen, dann bist auch du hinterher schlauer ...
Ausgaben von Befehlen bekommst du immer so in Variablen (Bash)
var=$(BEFEHL)
Alternativ auch mit Backtick
var=`BEFEHL`