J'ai parfois besoin de vérifier certains journaux et je le fais avec cette commande:
egrep -o "success|error|fail" <filename> | sort | uniq -c
Exemple d'entrée:
test error on line 10
test connect success
test insert success
test started at 00:00
test delete fail
Exemple de sortie:
1 error
1 fail
2 success
Je voudrais savoir si quelqu'un connaît un moyen de le faire avec une commande plus courte?
Avant de vous demander pourquoi je voudrais le faire avec une commande différente ... Pas de raison particulière, je suis juste curieux :)
command-line
grep
alternative
Wolfy
la source
la source
Pas beaucoup plus court, mais comme vous n'avez pas vraiment besoin de l'expression régulière, il y a
fgrep
(grep -F
).une autre façon d'écrire la même chose en bash:
la source
Vous pouvez écrire un simple script bash puis appeler le script, comme:
et enregistrez-le sous (par exemple)
myscript.sh
. Ensuite, faites unchmod +x myscript.sh
et vous pouvez l'appeler commemyscript.sh <filename>
.la source
Votre commande, bien que courte et douce, est un moyen plutôt détourné de compter les occurrences d'un terme. Je prendrais probablement l'approche directe et directe et utiliserais le drapeau -c de grep (qui fait exactement cela) à l'intérieur d'une boucle shell:
Pas aussi court, pas aussi excitant, potentiellement plus rapide pour les gros fichiers journaux (non
sort
). Je dirais que c'est un lavage.la source
Cela pourrait être une réponse factice mais je pense que, dans ce cas,
sort
est tout à fait inutile; vous pouvez peut-être l'omettre. Néanmoins, nous utilisons ici trois commandes différentes pour trois actions différentes.Nous pouvons le raccourcir si certains d'entre eux peuvent être atteints avec une option
grep
, mais je ne vois pas laquelle ... :)la source
2 success 1 fail 1 success
.