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
Please also mark the comments that contributed to the solution of the article
Content-ID: 3584982339
Url: https://administrator.de/contentid/3584982339
Printed on: September 13, 2024 at 02:09 o'clock
3 Comments
Latest comment
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`