Groups aus RegEx in Variablen
Hallo zusammen,
ich habe es zumindest schon mal geschafft, eine Logzeile in einzelne Gruppen zu zerlegen:
Logzeile:
Regex:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3584982339
Url: https://administrator.de/contentid/3584982339
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
sed und awk sind bspw. deine Freunde da kannst du Strings umbauen wie du lustig bist und brauchst.
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
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/'
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"
}
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)
Alternativ auch mit Backtick
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)
var=`BEFEHL`