特定の条件でコード行数を計算する方法

特定の条件でコード行数を計算する方法
  • 空行を無視
  • スペースのみを含む行を無視
  • タブ文字のみを含む行を無視
  • 次に始まる行を無視してください。//

ブロックコメントの数を数えるためにこれを追加したかったです。スクリプトを使用しようとしています。

sed '/  "/*"   /,/   "*\"   / p'  a.txt | wc -l

/スター/はい

コードは/ *内の各行を計算します。/には/を含む行が含まれます。そして*/

/*
ABC
Def
Thi
*/

答え1

一致を反転するgrep -cために一致する行数を計算するために使用されます。-v

grep -cv -e '^\s*$' -e '^\s*//' yourcode.c

実装がそれをサポートしていない場合は、\s同等の標準に置き換えてください。[[:space:]]grep

/dev/null(そしてその値には全く有用な意味がないので、結果を次にリダイレクトすることを忘れないでください。)

答え2

GNUsedwc

sed -E -n '\:^[ \t]*$|^[ \t]*//:!p' infile |wc -l
  • 行間隔、タブ、空行のみを無視します。^[ \t]*$
  • 空白がある場合から始まる行は無視または//スキップ^//されます。^[ \t]*//
  • wc -lsed計算は、次に置き換えることができる残りの行を出力します。sed -n '$='

または[ \t]*に交換してください\s*

sed -E -n '\:^\s*$|^\s*//:!p' infile

awk解決策。

awk '!/^[ \t]*$/ && !/^[ \t]*\/\//{N++} END{print N}' infile

答え3

使用awk:

awk 'NF > 0 && !/^\/\// { c++ } END { print c }'

awk正規表現を使用して各行をフィールドに分割します。デフォルトでは、この正規表現はスペースとタブで区切られます。

フィールド数がNF0より大きく、行が開始されない場合は//それを計算します。最後に合計を印刷します。

//行の前に空白文字を必要な数だけ許可し、その行をスキップするには、次の手順を実行します。

awk 'NF > 0 && !/^[[:space:]]*\/\// { c++ } END { print c }'

関連情報