|
| 1 | +--- |
| 2 | +title: Filter-Befehle |
| 3 | +sidebar: |
| 4 | + order: 2 |
| 5 | +--- |
| 6 | + |
| 7 | +import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; |
| 8 | + |
| 9 | +## Anzeigen & Zählen |
| 10 | + |
| 11 | +### `cat` – Inhalt ausgeben |
| 12 | + |
| 13 | +`cat` gibt den Inhalt einer oder mehrerer Dateien nach stdout aus. Ohne Argument liest es von stdin: |
| 14 | + |
| 15 | +```bash |
| 16 | +cat datei.txt # Datei ausgeben |
| 17 | +cat datei1.txt datei2.txt # mehrere Dateien hintereinander |
| 18 | +cat datei1.txt datei2.txt > zusammen.txt # zusammenführen |
| 19 | +``` |
| 20 | + |
| 21 | +Als Filter in einer Pipeline: |
| 22 | + |
| 23 | +```bash |
| 24 | +cat /etc/passwd | grep root |
| 25 | +``` |
| 26 | + |
| 27 | +<Aside type="tip"> |
| 28 | +Wenn nur eine Datei verarbeitet wird, ist `cat file | befehl` oft unnötig – `befehl file` funktioniert genauso. Der Einsatz von `cat` ergibt Sinn, wenn mehrere Dateien kombiniert werden oder die Pipeline-Logik es erfordert. |
| 29 | +</Aside> |
| 30 | + |
| 31 | +### `head` und `tail` – Anfang und Ende |
| 32 | + |
| 33 | +```bash |
| 34 | +head datei.txt # erste 10 Zeilen (Standard) |
| 35 | +head -n 20 datei.txt # erste 20 Zeilen |
| 36 | +head -n -5 datei.txt # alles außer den letzten 5 Zeilen |
| 37 | + |
| 38 | +tail datei.txt # letzte 10 Zeilen (Standard) |
| 39 | +tail -n 20 datei.txt # letzte 20 Zeilen |
| 40 | +tail -n +5 datei.txt # ab Zeile 5 bis zum Ende |
| 41 | +``` |
| 42 | + |
| 43 | +`tail -f` folgt einer wachsenden Datei in Echtzeit – unverzichtbar für Log-Monitoring: |
| 44 | + |
| 45 | +```bash |
| 46 | +tail -f /var/log/syslog |
| 47 | +tail -f /var/log/nginx/access.log |
| 48 | +``` |
| 49 | + |
| 50 | +<Aside type="tip"> |
| 51 | +`tail -f` wartet auf neue Zeilen und gibt sie sofort aus. Beenden mit `Strg`+`C`. Ideal um einem laufenden Dienst beim Schreiben von Logs zuzusehen. |
| 52 | +</Aside> |
| 53 | + |
| 54 | +### `wc` – zählen |
| 55 | + |
| 56 | +`wc` (*Word Count*) zählt Zeilen, Wörter und Zeichen: |
| 57 | + |
| 58 | +```bash |
| 59 | +wc datei.txt |
| 60 | +# 42 318 2104 datei.txt |
| 61 | +# ^ ^ ^ |
| 62 | +# | | Bytes |
| 63 | +# | Wörter |
| 64 | +# Zeilen |
| 65 | +``` |
| 66 | + |
| 67 | +Einzelne Werte: |
| 68 | + |
| 69 | +```bash |
| 70 | +wc -l datei.txt # nur Zeilen |
| 71 | +wc -w datei.txt # nur Wörter |
| 72 | +wc -c datei.txt # nur Bytes |
| 73 | + |
| 74 | +ls /etc | wc -l # Anzahl Einträge in /etc |
| 75 | +``` |
| 76 | + |
| 77 | +### `less` – seitenweiser Pager |
| 78 | + |
| 79 | +`less` zeigt langen Output seitenweise an – nützlich wenn eine Ausgabe nicht auf den Bildschirm passt: |
| 80 | + |
| 81 | +```bash |
| 82 | +less datei.txt |
| 83 | +ls -la /etc | less |
| 84 | +cat /var/log/syslog | less |
| 85 | +``` |
| 86 | + |
| 87 | +Navigation wie in `man`: `Space`/`b`, `/suche`, `q` zum Beenden. |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## Sortieren & Filtern |
| 92 | + |
| 93 | +### `sort` – sortieren |
| 94 | + |
| 95 | +```bash |
| 96 | +sort datei.txt # alphabetisch aufsteigend |
| 97 | +sort -r datei.txt # absteigend |
| 98 | +sort -n zahlen.txt # numerisch (nicht lexikografisch) |
| 99 | +sort -h größen.txt # menschenlesbare Größen (1K, 2M, ...) |
| 100 | +sort -u datei.txt # sortieren und Duplikate entfernen |
| 101 | +sort -t: -k3 -n /etc/passwd # Feld 3, :-getrennt, numerisch sortieren |
| 102 | +``` |
| 103 | + |
| 104 | +```bash |
| 105 | +ls -1 /etc | sort -r | head -5 # letzte 5 Einträge alphabetisch |
| 106 | +``` |
| 107 | + |
| 108 | +### `uniq` – Duplikate entfernen |
| 109 | + |
| 110 | +`uniq` entfernt **aufeinanderfolgende** identische Zeilen. Fast immer in Kombination mit `sort`: |
| 111 | + |
| 112 | +```bash |
| 113 | +sort datei.txt | uniq # sortieren, dann Duplikate entfernen |
| 114 | +sort datei.txt | uniq -c # mit Häufigkeit voranstellen |
| 115 | +sort datei.txt | uniq -d # nur Duplikate anzeigen |
| 116 | +sort datei.txt | uniq -u # nur Unikate anzeigen (kein Duplikat) |
| 117 | +``` |
| 118 | + |
| 119 | +Typischer Einsatzfall – häufigste Einträge in einem Log: |
| 120 | + |
| 121 | +```bash |
| 122 | +cat access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head -10 |
| 123 | +# → Top-10 IP-Adressen nach Anzahl der Zugriffe |
| 124 | +``` |
| 125 | + |
| 126 | +<Aside type="note"> |
| 127 | +`uniq` prüft nur *benachbarte* Zeilen. `a, b, a` – hier wird kein Duplikat erkannt. Deshalb immer zuerst `sort`, dann `uniq`. |
| 128 | +</Aside> |
| 129 | + |
| 130 | +--- |
| 131 | + |
| 132 | +## Ausschneiden & Ersetzen |
| 133 | + |
| 134 | +### `cut` – Felder ausschneiden |
| 135 | + |
| 136 | +`cut` extrahiert Spalten aus strukturiertem Text: |
| 137 | + |
| 138 | +```bash |
| 139 | +# -d Trennzeichen, -f Feldnummer(n) |
| 140 | +cut -d: -f1 /etc/passwd # Benutzernamen (Feld 1, getrennt durch :) |
| 141 | +cut -d: -f1,3 /etc/passwd # Benutzername und UID |
| 142 | +cut -d, -f2-4 daten.csv # Felder 2 bis 4 einer CSV |
| 143 | + |
| 144 | +# -c Zeichenpositionen |
| 145 | +cut -c1-10 datei.txt # erste 10 Zeichen jeder Zeile |
| 146 | +``` |
| 147 | + |
| 148 | +```bash |
| 149 | +cat /etc/passwd | cut -d: -f1 | sort |
| 150 | +# → alle Benutzernamen alphabetisch |
| 151 | +``` |
| 152 | + |
| 153 | +### `tr` – Zeichen übersetzen und löschen |
| 154 | + |
| 155 | +`tr` (*Translate*) ersetzt oder löscht einzelne Zeichen. Es liest nur von stdin: |
| 156 | + |
| 157 | +```bash |
| 158 | +echo "hallo welt" | tr 'a-z' 'A-Z' # → HALLO WELT |
| 159 | +echo "hallo welt" | tr ' ' '_' # → hallo_welt |
| 160 | +echo "hallo welt" | tr -s ' ' # mehrfache Leerzeichen zusammenführen (-s squeeze) |
| 161 | +echo "hallo123" | tr -d '0-9' # Ziffern löschen (-d delete) → hallo |
| 162 | +cat datei.txt | tr -d '\r' # Windows-Zeilenenden entfernen |
| 163 | +``` |
| 164 | + |
| 165 | +<Tabs> |
| 166 | + <TabItem label="Zeichenbereiche"> |
| 167 | + ```bash |
| 168 | + tr 'a-z' 'A-Z' # Kleinbuchstaben → Großbuchstaben |
| 169 | + tr 'A-Z' 'a-z' # Großbuchstaben → Kleinbuchstaben |
| 170 | + tr '0-9' 'a-j' # Ziffern → Buchstaben |
| 171 | + ``` |
| 172 | + </TabItem> |
| 173 | + <TabItem label="Sonderzeichen"> |
| 174 | + ```bash |
| 175 | + tr ' ' '\n' # Leerzeichen → Zeilenumbruch (ein Wort pro Zeile) |
| 176 | + tr '\n' ' ' # Zeilenumbrüche → Leerzeichen (alles in eine Zeile) |
| 177 | + tr -d '\r' # Carriage Returns entfernen (Windows → Unix) |
| 178 | + ``` |
| 179 | + </TabItem> |
| 180 | +</Tabs> |
0 commit comments