空行を除いた CLI シェルのコード行数が何行あるかを知るにはどうすればよいでしょうか?
この質問の目的は、sh
とBash
CLI シェルの両方のコード行をカウントする方法を学ぶことです。
カーネルには約 1,500 万行のコードがあるため、カーネルとのインターフェースを可能にするこれら 2 つのプログラムのコード行数の大きさに驚きました。
答え1
最新バージョンについてはバッシュつまりbash v4.4の場合、答えは134576です。私が使用するコマンドは
find . -name '*.[ch]' | xargs grep -v '^\s*$' | wc -l
find . -name '*.[ch]'
.c
またはで終わるファイルを検索することを意味します( ,ファイルは.h
カウントしませんが、これもソースコードの一部だと思います)。.def
.po
(grep -v '^\s*$'
歴史的注記:形式[\s*]を\s*に変更)、
-v
該当する行のみを印刷しますないマッチ^
行頭を意味する$
行末を意味する\s
スペース、タブ、改行を含む空白を意味します
したがって、grep -v '^[\s]*$'
空白のみの行を除外してwc -l
カウントします。
沢山ありますシュソースコード、UNIX v6 sh(https://etsh.io/history/sh.c より)。行数はわずか860行です。
答え2
私が正しく理解していれば、あなたの友人はコマンド wc です。
# cat example
passwd
group
# wc -l example
3 example
# grep -v "^$" example | wc -l
2
または grep のみの場合:
# grep -c . example
2
ファイルが複数ある場合。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}'