đź REGEX_PANDA.md â Muster-Spuren im Textwald
BashPanda sagt: Regex ist wie eine Spur im Log-Wald:
du siehst nicht alles â aber du erkennst Muster.
#kein #krĂźmel #geht #verloren
1) Was sind Reguläre Ausdrßcke?
Reguläre Ausdrßcke (Regex / RegExp) sind eine kompakte Schreibweise, um
Textmuster zu beschreiben â fĂźr vier Kern-Sachen:
- Suchen (finde Stellen)
- Filtern (lass nur passende Zeilen durch)
- Extrahieren (hole nur das TeilstĂźck, das du brauchst)
- Ersetzen (forme Text um)
Du findest Regex Ăźberall:
- grep / sed / awk / perl
- Python / JavaScript / PHP
- Editor-Suche (VS Code etc.)
2) Panda-Cheatsheet: die wichtigsten Bausteine
| Symbol | Bedeutung | Beispiel |
|---|---|---|
. |
beliebiges Zeichen | a.c â abc, axc |
* |
0 oder mehr | ab*c â ac, abc |
+ |
1 oder mehr | ab+c â abc, abbc |
? |
optional (0/1) | colou?r |
^ |
Zeilenanfang | ^ERROR |
$ |
Zeilenende | \.txt$ |
[abc] |
Zeichenmenge | [0-9] |
(...) |
Gruppe (capture) | (GET|POST) |
| |
oder | cat|dog |
\d |
Ziffer (PCRE/Python/JS) | \d+ |
[:digit:] |
Ziffer (POSIX) | [[:digit:]]+ |
Panda-Tipp: Im Terminal lieber mit POSIX-Klassen arbeiten, wenn du
Engine-Unterschiede vermeiden willst: [[:digit:]], [[:space:]], [[:alpha:]].
3) Engine-Unterschiede (wichtig, sonst frisst Panda falschen Bambus)
grep hat drei âZähneâ
grep -Fâ Fixed String (schnell, keine Regex)grep -Eâ ERE (Extended Regex)grep -Pâ PCRE (Lookarounds,\d,\b⌠falls verfĂźgbar)
awk ist POSIX-Regex (kein PCRE)
\bist in awk kein Word-Boundary.- FĂźr âWortgrenzeâ lieber mit POSIX-Mustern arbeiten oder
grep -P/perl nutzen.
4) Praxis: 10 Regex-Moves, die du im Wald ständig brauchst
4.1 Zeilen, die mit ERROR beginnen
grep -nE '^ERROR' log.txt
4.2 Alles auĂer Kommentare und leere Zeilen (Configs säubern)
grep -vE '^[[:space:]]*(#|$)' config.conf
4.3 Doppelte Spaces â ein Space (Text glätten)
sed -E 's/[[:space:]]+/ /g' file.txt
4.4 Dateiendung nur am Ende ändern (.txt â .doc)
echo "example.txt" | sed -E 's/\.txt$/.doc/'
4.5 Nur Matches ausgeben (nicht die ganze Zeile)
echo "User=robot id=12345" | grep -oE '[[:digit:]]+'
5) Crumbforest-Log-Magie: Nginx Accesslog Pfade zählen
Option A (PCRE): GET-Pfad extrahieren
(zwischen GET und HTTP/...)
grep -oP '(?<=GET\s)[^\s"]+(?=\sHTTP/\d+\.\d+")' /var/log/nginx/access.log \
| awk '{ c[tolower($0)]++ } END{ for (p in c) printf "%5d %s\n", c[p], p }' \
| sort -nr | head
Option B (awk-only, robust & schnell)
awk '
match($0, /"GET ([^ ]+) HTTP\/[0-9.]+"/, m) {
p = tolower(m[1]); c[p]++
}
END { for (p in c) printf "%5d %s\n", c[p], p }
' /var/log/nginx/access.log | sort -nr | head
Panda sagt: B ist oft die beste Wahl â weniger Quoting-Stress, kein
-PnĂśtig.
6) Mini-Ăbungen (fĂźr echte KrĂźmel-Power)
Finde alle IPv4-Adressen in einem Text
grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt
Extrahiere Datum TT/MM/JJJJ
grep -oE '[0-9]{2}/[0-9]{2}/[0-9]{4}' file.txt
Zähle Statuscodes (200/404/500) im Accesslog
awk '{ code=$9; if (code ~ /^[0-9]{3}$/) c[code]++ }
END{ for (k in c) printf "%6d %s\n", c[k], k }' /var/log/nginx/access.log | sort -nr
7) Panda-Regeln (damit keine KrĂźmel verloren gehen)
- Starte klein: erst
-F, dann-E, dann-P. - Teste Muster an 2â3 Beispielzeilen.
- Nutze
^und$, wenn du präzise sein willst (Endung, Zeilenstart). - Wennâs unklar ist: mach eine dry-run Ausgabe bevor du ersetzt (
sed ... | less).
#kein #krĂźmel #geht #verloren
crewlove đźđŚđŚđ˛