grep -c ERROR app.log zählt Zeilen, die das Wort enthalten; grep -o ERROR app.log | wc -l zählt, wie oft das Wort tatsächlich auftaucht. In derselben Datei sind das 3 und 4, und der Unterschied ist eine einzige Zeile mit zwei Fehlern. Welche Zahl Sie brauchen, hängt an der Frage, die Sie eigentlich meinten.
1. Wie viele Zeilen das Wort enthalten
$ clai wie viele zeilen in app.log enthalten ERROR→ grep -c ERROR app.log3
-c zählt Trefferzeilen, nicht Treffer. Eine Zeile mit zwei ERROR zählt weiterhin als eine.
2. Wie oft das Wort vorkommt
$ clai wie oft kommt ERROR in app.log vor→ grep -o ERROR app.log | wc -l4
3 gegen 4 in derselben Datei. -o druckt jeden Treffer in eine eigene Zeile, und erst dann zählt wc -l Vorkommen. Der Zusatz ist genau die Zeile mit den zwei Fehlern.
3. Ohne Rücksicht auf Groß- und Kleinschreibung
$ clai zähle zeilen mit error in beliebiger schreibweise→ grep -ic error app.log4
-i fand eine vierte Zeile — die mit dem kleingeschriebenen Wort. In einem Log, in das mehrere Dienste schreiben, ist die Schreibweise nie garantiert.
4. Die häufigsten Fehlermeldungen
$ clai zeige welche fehler am häufigsten auftreten→ grep -o 'ERROR [a-z ]*' app.log | sed 's/ *$//' | sort | uniq -c | sort -rn 2 ERROR timeout connecting to db 1 ERROR retry failed 1 ERROR permission denied
Meist ist das das eigentliche Ziel. -o zieht die Meldung heraus, sed schneidet nachlaufende Leerzeichen ab, uniq -c zählt, und das zweite sort -rn hebt die häufigen nach oben.
5. Verteilung über die Stunden
$ clai zeige in welchen stunden fehler auftraten→ grep ERROR app.log | cut -c12-13 | sort | uniq -c 1 09 1 10 1 11
cut -c12-13 holt die Stunde aus einem Zeitstempel der Form 2026-08-10 09:12:03. Die Positionen hängen an Ihrem Logformat — schauen Sie sich eine Zeile an und zählen Sie die Zeichen, bevor Sie das kopieren.
6. Mehrere Dateien auf einmal
$ clai zähle die fehler in jeder logdatei→ grep -c ERROR *.logapp.log:3app2.log:3
Bei mehr als einer Datei druckt grep Name und Zähler durch einen Doppelpunkt getrennt. Zum Ranking: grep -c ERROR *.log | sort -t: -k2 -rn.
Gotchas
grep -czählt keine Vorkommen. An einer Datei geprüft:-csagt 3,-o | wc -lsagt 4. Trifft eine Zeile zweimal, sieht-cdas nicht. Entscheiden Sie, welche Frage Sie stellen: "wie viele Zeilen" oder "wie oft".grep -oohne Treffer druckt nichts und endet mit 1. In der Pipe zuwc -lsieht das wie eine ehrliche Null aus, aber der Status ist ungleich null, und ein Skript mitset -estirbt genau dort.- Die Positionen von
cut -chängen am Logformat. Sobald der Logger Millisekunden oder einen Hostnamen voranstellt, zählt die Stundenaufteilung stillschweigend die falschen Zeichen. Bei instabilen Formaten lieber Felder nehmen:awk '{print $2}'.
Related questions
Wie zähle ich ganze Wörter statt Teilzeichenketten? grep -wo error — -w verlangt Wortgrenzen, sonst zählen errors und errorlog mit.
Wie zähle ich in komprimierten Logs? zgrep -c ERROR app.log.1.gz verhält sich wie grep, ohne die Datei auf die Platte zu entpacken.
Wie zähle ich verschiedene Werte? Ein sort -u vor dem Zählen: grep -o 'ERROR [a-z ]*' app.log | sort -u | wc -l liefert die Zahl unterschiedlicher Meldungen statt ihrer Summe.
See also
- Mehrere Logdateien gleichzeitig verfolgen
- journalctl: Logs eines Dienstes
- Doppelte Zeilen entfernen — mit oder ohne Sortieren
CliAI macht aus "wie oft" und "wie viele Zeilen" zwei verschiedene Befehle und zeigt, welchen es gewählt hat. In einer Zeile installieren.