Como en realidad está pidiendo una grep
solución , agrego esta confiando solo en GNU grep
(está bien, también usando la sintaxis de shell y echo
...):
#!/bin/sh
echo $(( $(grep -c "" "$1") - $(grep -B$(grep -cv . "$1") . "$1" |grep -c "") ))
¿Qué estoy haciendo aquí? $(grep -c ".*" "$1")
cuenta todas las líneas en el archivo, luego restamos el archivo sin las líneas vacías finales.
¿Y cómo conseguirlos? $(grep -B42 . "$1"
grep todas las líneas no vacías y 42 líneas antes de ellas, por lo que imprimiría todo hasta la última línea no vacía, siempre que no haya más de 42 líneas vacías consecutivas antes de una línea no vacía. Para evitar ese límite, tomo $(grep -cv . "$1")
como parámetro para la -B
opción, que es el número total de líneas vacías, por lo que siempre es lo suficientemente grande. De esta manera, he eliminado las líneas vacías finales y puedo usar |grep -c ".*"
para contar las líneas.
Brillante, ¿no es así? (-;