タブを正しく考慮して80列より広い行数を計算する

タブを正しく考慮して80列より広い行数を計算する

現在の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 }'

おすすめ記事