En algún momento necesito verificar algunos registros y hago esto con este comando:
egrep -o "success|error|fail" <filename> | sort | uniq -c
Entrada de muestra:
test error on line 10
test connect success
test insert success
test started at 00:00
test delete fail
Salida de muestra:
1 error
1 fail
2 success
Me gustaría saber si alguien sabe una manera de hacer esto con un comando más corto.
Antes de preguntar por qué me gustaría hacer esto con un comando diferente ... No hay una razón especial, solo tengo curiosidad :)
command-line
grep
alternative
Wolfy
fuente
fuente
No es mucho más corto, pero como realmente no necesita la expresión regular, hay
fgrep
(grep -F
)Otra forma de escribir lo mismo en bash:
fuente
Puede escribir un script bash simple y luego llamar al script, como:
y guárdelo como (por ejemplo)
myscript.sh
. Luego haz unchmod +x myscript.sh
y puedes llamarlo asímyscript.sh <filename>
.fuente
Su comando, aunque breve y dulce, es una forma bastante tortuosa de contar las ocurrencias de un término. Probablemente tomaría el enfoque directo y directo y usaría el indicador -c de grep (que hace exactamente eso) dentro de un ciclo de shell:
No tan corto, no tan emocionante, potencialmente más rápido para grandes archivos de registro (no
sort
). Yo diría que es un lavado.fuente
Esta podría ser una respuesta ficticia, pero creo que, en este caso,
sort
es bastante inútil; tal vez puedas omitirlo. Sin embargo, aquí estamos usando tres comandos diferentes para tres acciones diferentes.Podemos acortarlo si se puede llegar a algunos de ellos con alguna opción
grep
, pero no veo cuál ... :)fuente
2 success 1 fail 1 success
.