Ich muss manchmal einige Protokolle überprüfen und mache dies mit diesem Befehl:
egrep -o "success|error|fail" <filename> | sort | uniq -c
Beispieleingabe:
test error on line 10
test connect success
test insert success
test started at 00:00
test delete fail
Beispielausgabe:
1 error
1 fail
2 success
Ich würde gerne wissen, ob jemand einen Weg kennt, dies mit einem kürzeren Befehl zu tun.
Bevor du fragst, warum ich das mit einem anderen Befehl machen möchte ... Kein besonderer Grund, ich bin nur neugierig :)
command-line
grep
alternative
Wolfy
quelle
quelle
Nicht viel kürzer, aber da Sie den regulären Ausdruck nicht wirklich brauchen, gibt es
fgrep
(grep -F
).eine andere Möglichkeit, dasselbe in bash zu schreiben:
quelle
Sie können ein einfaches Bash-Skript schreiben und das Skript dann wie folgt aufrufen:
und speichern Sie es als (zum Beispiel)
myscript.sh
. Dann mach einchmod +x myscript.sh
und du kannst es so nennenmyscript.sh <filename>
.quelle
Ihr Befehl ist zwar kurz und bündig, aber eine ziemlich umständliche Methode, um Vorkommen eines Begriffs zu zählen. Ich würde wahrscheinlich den stumpfen, direkten Ansatz wählen und das -c-Flag von grep (das genau das tut) innerhalb einer Shell-Schleife verwenden:
Nicht so kurz, nicht so aufregend, möglicherweise schneller für große Protokolldateien (nein
sort
). Ich würde sagen, es ist eine Wäsche.quelle
Dies könnte eine Scheinantwort sein, aber ich denke, in diesem Fall
sort
ist es ziemlich nutzlos; Vielleicht kannst du es weglassen. Trotzdem verwenden wir hier drei verschiedene Befehle für drei verschiedene Aktionen.Wir können es kurzschließen, wenn einige von ihnen mit einer Option von erreicht werden können
grep
, aber ich sehe nicht, welche ... :)quelle
2 success 1 fail 1 success
.