¿Cómo saber cuántas filas de código hay para un shell CLI, sin contar las líneas vacías?
El propósito de esta pregunta es aprender cómo puedo contar las filas de código para ambos shells sh
y Bash
CLI.
Dado que el kernel tiene alrededor de 15 millones de filas de código, me sorprendió la magnitud de las filas de código para estos 2 programas que me permiten interactuar con el kernel.
Respuesta1
Para la última versión deintento, es decir, bash v4.4, la respuesta es 134576. El comando que uso es
find . -name '*.[ch]' | xargs grep -v '^\s*$' | wc -l
find . -name '*.[ch]'
significa buscar archivos que terminen con .c
o .h
(sin contar los archivos .def
, .po
aunque creo que también son parte del código fuente)
en, grep -v '^\s*$'
(nota histórica, cambie la forma [\s*] a \s*),
-v
imprime sólo las líneas que lo hacennofósforo^
significa inicio de línea$
significa final de línea\s
significa espacios en blanco que incluyen espacio, tabulación, salto de línea
entonces grep -v '^[\s]*$'
excluye las líneas que solo tienen espacios en blanco y wc -l
las cuenta.
Hay muchosshcódigos fuente, para UNIX v6 sh(https://etsh.io/history/sh.c). Sólo hay 860 líneas.
Respuesta2
Si he entendido bien, entonces tu amigo es el comando wc.
# cat example
passwd
group
# wc -l example
3 example
# grep -v "^$" example | wc -l
2
O sólo con grep:
# grep -c . example
2
Si hay varios archivos. Como ejemplo con el código fuente de bash.
# wget -c https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
# tar xfvz bash-4.4.tar.gz
# grep -R -c . bash-4.4/ | awk -F : '{sum += $2} END {print sum}'