Wie kann man herausfinden, wie viele Codezeilen für eine CLI-Shell vorhanden sind, Leerzeilen nicht mitgezählt?
Der Zweck dieser Frage besteht darin, herauszufinden, wie ich die Codezeilen sowohl für als auch für CLI-Shells zählen sh
kann Bash
.
Angesichts der Tatsache, dass der Kernel über etwa 15 Millionen Codezeilen verfügt, war ich erstaunt über die Größenordnung der Codezeilen für diese beiden Programme, die mir die Schnittstelle zum Kernel ermöglichen.
Antwort1
Für die neueste Version vonSchlag, also Bash v4.4, lautet die Antwort 134576. Der Befehl, den ich verwende, ist
find . -name '*.[ch]' | xargs grep -v '^\s*$' | wc -l
find . -name '*.[ch]'
.c
bedeutet, Dateien zu finden, die mit oder enden (die , -Dateien .h
nicht mitgezählt , obwohl ich glaube, dass sie auch Teil des Quellcodes sind).def
.po
in, grep -v '^\s*$'
(historische Anmerkung, Änderung der Form [\s*] in \s*),
-v
druckt nur die Zeilen, dienichtübereinstimmen^
bedeutet Zeilenanfang$
bedeutet Zeilenende\s
bedeutet Leerzeichen einschließlich Leerzeichen, Tabulatoren, Zeilenvorschub
schließt also grep -v '^[\s]*$'
Zeilen aus, die nur Leerzeichen enthalten, und wc -l
zählt diese.
Da sind vieleSchQuellcodes, für UNIX v6 sh(https://etsh.io/history/sh.c). Es gibt nur 860 Zeilen.
Antwort2
Wenn ich das richtig verstanden habe, dann ist dein Freund der Befehl wc.
# cat example
passwd
group
# wc -l example
3 example
# grep -v "^$" example | wc -l
2
Oder nur mit grep:
# grep -c . example
2
Wenn mehrere Dateien vorhanden sind. Als Beispiel mit dem Bash-Quellcode.
# 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}'