Back

Linux Text-Verarbeitung Cheat Sheet

Linux Text-Verarbeitung Cheat Sheet

Sie starren auf eine 2 GB große Log-Datei und suchen nach fehlgeschlagenen API-Aufrufen der letzten Stunde. Oder Sie müssen E-Mail-Adressen aus einem CSV-Export extrahieren. Für solche Aufgaben sollten Sie kein Python-Skript schreiben müssen.

Dieses Cheat Sheet behandelt essentielle Linux-Befehle zur Text-Verarbeitung – grep, awk, sed und ihre modernen Pendants – mit praktischen Beispielen für alltägliche Frontend- und Full-Stack-Entwicklungs-Workflows.

Wichtigste Erkenntnisse

  • grep und ripgrep sind Ihre bevorzugten Tools für die Textsuche in Dateien, wobei ripgrep Geschwindigkeitsvorteile und .gitignore-Unterstützung für große Codebasen bietet.
  • sed verarbeitet stream-basierte Such- und Ersetzungsoperationen, aber achten Sie auf Verhaltensunterschiede zwischen GNU- und BSD-Versionen.
  • awk eignet sich hervorragend für spaltenorientierte Verarbeitung von Logs, CSVs und anderen strukturierten Texten.
  • jq schließt die Lücke, die grep und awk bei der Arbeit mit JSON-Daten hinterlassen.
  • Der Pipe-Operator (|) ist das Bindeglied, das diese Befehle zu leistungsstarken, kombinierbaren Pipelines verkettet.

Kern-Suchbefehle: grep und ripgrep

grep durchsucht Dateien nach Mustern und gibt übereinstimmende Zeilen aus. Es ist die Grundlage jeder Text-Verarbeitungs-Pipeline.

# Basic pattern search
grep "error" server.log

# Case-insensitive search
grep -i "warning" app.log

# Show line numbers
grep -n "TODO" src/*.js

# Invert match (lines NOT containing pattern)
grep -v "debug" output.log

# Extended regex (-E enables +, ?, |, and grouping)
grep -E "error|warning|fatal" app.log

# Count matches only
grep -c "404" access.log

ripgrep (rg) ist eine schnellere Alternative, die standardmäßig .gitignore berücksichtigt:

# Recursive search (default behavior)
rg "useState" ./src

# Search specific file types
rg -t js "async function"

# Show context around matches
rg -C 3 "Exception" logs/

Bei großen Codebasen läuft ripgrep typischerweise 2–5x schneller als grep und überspringt automatisch irrelevante Dateien.

Text-Transformation mit sed

sed führt Stream-Editing durch – Such- und Ersetzungsoperationen, ohne eine Datei in einem Editor zu öffnen.

# Replace first occurrence per line
sed 's/http/https/' urls.txt

# Replace all occurrences (global flag)
sed 's/old/new/g' config.txt

# Delete lines matching pattern
sed '/^#/d' config.ini

# In-place editing (GNU sed)
sed -i 's/localhost/127.0.0.1/g' .env

# macOS/BSD requires an empty backup extension
sed -i '' 's/localhost/127.0.0.1/g' .env

Hinweis: Das Verhalten des -i-Flags unterscheidet sich zwischen GNU- und BSD-sed. Unter macOS sollten Sie immer einen leeren String (-i '') angeben oder eine Backup-Erweiterung festlegen (z.B. -i .bak).

Spaltenverarbeitung mit awk

awk eignet sich hervorragend für strukturierte Texte – Logs, CSVs und durch Leerzeichen getrennte Daten. POSIX-awk bewältigt die meisten gängigen Aufgaben portabel.

# Print specific columns
awk '{print $1, $4}' access.log

# Custom field separator (CSV)
awk -F',' '{print $2}' data.csv

# Filter by condition
awk '$3 > 500 {print $1, $3}' response_times.log

# Sum a column
awk '{sum += $2} END {print sum}' sales.csv

# BEGIN/END blocks for headers
awk 'BEGIN {print "User\tCount"} {print $1, $2}' stats.txt

Wichtige unterstützende Befehle

# Sort and deduplicate (with counts, descending)
sort access.log | uniq -c | sort -rn

# Extract columns by delimiter
cut -d',' -f1,3 users.csv

# Character translation (lowercase to uppercase)
tr '[:lower:]' '[:upper:]' < input.txt

# Count lines in a file
wc -l package.json

# Find files by name pattern
find ./src -name "*.test.js" -type f

JSON-Verarbeitung mit jq

Für moderne Webentwicklung übernimmt jq das JSON-Parsing, das grep und awk nicht sauber bewältigen können:

# Extract a field
jq '.data.users' response.json

# Filter array elements
jq '.items[] | select(.status == "active")' data.json

# Format API response
curl -s https://api.example.com/users | jq '.[].email'

Beachten Sie, dass das erste Beispiel oben eine nutzlose Verwendung von cat vermeidet. jq kann Dateien direkt lesen, daher ist cat response.json | jq '...' unnötig.

Praktische Pipeline-Beispiele

Heutige Fehler aus Logs filtern:

grep "$(date +%Y-%m-%d)" app.log | grep -i error | awk '{print $4, $5}'

Eindeutige IP-Adressen extrahieren:

awk '{print $1}' access.log | sort -u

Größte Dateien in einem Projekt nach Zeilenanzahl finden:

find . -type f -name "*.js" -exec wc -l {} + | sort -rn | head -10

CSV-Daten bereinigen (Spalten extrahieren, Anführungszeichen entfernen, deduplizieren):

cut -d',' -f2,4 export.csv | sed 's/"//g' | sort -u

Schnellreferenz

AufgabeBefehl
Nach einem Muster suchengrep "pattern" file
Schnelle rekursive Sucherg "pattern"
Text ersetzensed 's/old/new/g' file
Spalten extrahierenawk '{print $1}' file
JSON parsenjq '.key' file.json
Sortieren und deduplizierensort -u file
Zeilen zählenwc -l file

Fazit

Beherrschen Sie diese Linux-Befehle zur Text-Verarbeitung und Sie werden die meisten Log-Analysen, Datenextraktionen und Datei-Transformationsaufgaben direkt vom Terminal aus bewältigen. Beginnen Sie mit grep für die Suche, fügen Sie awk für Spaltenarbeit hinzu und greifen Sie zu jq, wenn JSON im Spiel ist. Der Pipe-Operator (|) verbindet alles miteinander und ermöglicht es Ihnen, kleine, fokussierte Befehle zu Pipelines zu komponieren, die dedizierten Skripten ebenbürtig sind.

FAQs

Verwenden Sie cut, wenn Ihre Daten ein konsistentes Einzelzeichen-Trennzeichen haben und Sie nur bestimmte Felder abrufen müssen. Greifen Sie zu awk, wenn Sie Zeilen nach Bedingungen filtern, Berechnungen durchführen oder unregelmäßige Leerzeichen verarbeiten müssen. awk behandelt standardmäßig aufeinanderfolgende Leerzeichen als ein einzelnes Trennzeichen, was es nachsichtiger bei Log-Dateien und Befehlsausgaben macht.

Für die meisten Entwickler-Workflows ja. ripgrep ist schneller, berücksichtigt .gitignore und verwendet sinnvolle Standardeinstellungen wie rekursive Suche. grep ist jedoch standardmäßig auf praktisch jedem Unix-System verfügbar, was es zur sichereren Wahl für portable Shell-Skripte macht. Wenn Sie Skripte schreiben, die auf minimalen Servern oder Containern laufen sollen, bleiben Sie bei grep.

Testen Sie Ihren sed-Befehl immer zuerst ohne das -i-Flag, um die Ausgabe in Ihrem Terminal in der Vorschau anzuzeigen. Wenn Sie bereit sind, direkt zu bearbeiten, verwenden Sie eine Backup-Erweiterung wie sed -i .bak auf GNU-Systemen. Unter macOS oder BSD lautet die Syntax sed -i .bak. Dies erstellt eine Kopie der Originaldatei, bevor Änderungen angewendet werden, und gibt Ihnen eine Rollback-Option.

Ja. jq ist für die Navigation durch tief verschachtelte Strukturen konzipiert. Verwenden Sie Punkt-Notation zum Durchlaufen von Objekten, Klammer-Notation für Arrays und Pipe-Ausdrücke zum Verketten von Filtern. Zum Beispiel durchläuft jq '.data.users[] | select(.active == true) | .email' ein verschachteltes Array, filtert nach einer Bedingung und extrahiert ein Feld – alles in einem Befehl.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay