- 空行を無視
- スペースのみを含む行を無視
- タブ文字のみを含む行を無視
- 次に始まる行を無視してください。
//
ブロックコメントの数を数えるためにこれを追加したかったです。スクリプトを使用しようとしています。
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
GNUsed
とwc
。
sed -E -n '\:^[ \t]*$|^[ \t]*//:!p' infile |wc -l
- 行間隔、タブ、空行のみを無視します。
^[ \t]*$
- 空白がある場合から始まる行は無視または
//
スキップ^//
されます。^[ \t]*//
wc -l
sed
計算は、次に置き換えることができる残りの行を出力します。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
正規表現を使用して各行をフィールドに分割します。デフォルトでは、この正規表現はスペースとタブで区切られます。
フィールド数がNF
0より大きく、行が開始されない場合は//
それを計算します。最後に合計を印刷します。
//
行の前に空白文字を必要な数だけ許可し、その行をスキップするには、次の手順を実行します。
awk 'NF > 0 && !/^[[:space:]]*\/\// { c++ } END { print c }'