現在の80列より広い行数を計算するには、次のようにします。
$ git grep -h -c -v '^.\{,80\}$' **/*.{c,h,p{l,y}} \
|awk 'BEGIN { i=0 } { i+=$1 } END { printf ("%d\n", i) }'
44984
残念ながら、リポジトリはインデントにタブを使用するため、grep
パターンは正確ではありません。regex
標準幅8文字などのタブを処理する方法はありますかwc -L
?
この質問の目的に応じて、寄稿者は一貫してインデントするのに十分な規律があるか、規律の代わりgit commit
にフックがあると想定できます。
パフォーマンス関連の理由から、私は社内で動作するソリューションgit-grep(1)
やその他のツールを好みます。grep
前処理ファイルは必要ありません。。
ベストアンサー1
ファイルをパイピングして前処理しますexpand
。ユーティリティexpand
はタブを適切に拡張します(8文字ごとに標準のタブストップを使用)。
find . -type f \( -name '*.[ch]' -o -name '*.p[ly]' \) -exec expand {} + |
awk 'length > 80 { n++ } END { print n }'