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-Key: 3584982339

Url: https://administrator.de/contentid/3584982339

Printed on: April 26, 2024 at 20:04 o'clock

Mitglied: 3479126418
3479126418 Aug 08, 2022 updated at 15:31:51 (UTC)
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"  
}
Member: n0cturne
n0cturne Aug 08, 2022 at 15:41:05 (UTC)
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.
Mitglied: 3479126418
Solution 3479126418 Aug 08, 2022 updated at 15:46:58 (UTC)
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`