En compter les lignes de code (non vides) dans bash ils expliquent comment compter le nombre de lignes non vides.
Mais existe-t-il un moyen de compter le nombre de lignes vides dans un fichier? Par ligne vierge, j'entends également les lignes contenant des espaces.
Une autre façon est:
grep -cvP '\S' file
-P '\S'
(Expression rationnelle de Perl) correspondra à toute ligne contenant un espace non-espace-v
sélectionner des lignes non correspondantes-c
affiche le nombre de lignes correspondantesSi votre grep ne prend pas en charge -P
option, veuillez utiliser -E '[^[:space:]]'
Une façon d'utiliser grep
:
grep -c "^$" file
Ou avec des espaces:
grep -c "^\s*$" file
Vous pouvez également utiliser awk
pour cela:
awk '!NF {sum += 1} END {print sum}' file
Dans le manuel, "La variable NF est définie sur le nombre total de champs dans l'enregistrement d'entrée". Comme le séparateur de champs par défaut est l'espace, toute ligne composée de rien ou de certains espaces aura NF=0
.
Ensuite, il s'agit de compter combien de fois cela se produit.
$ cat a
aa dd
ddd
he llo
$ cat -vet a # -vet to show tabs and spaces
aa dd$
$
ddd$
$
^I$
he^Illo$
Maintenant comptons le nombre de lignes vides:
$ awk '!NF {s+=1} END {print s}' a
3
Utilisation de Perl one-liner:
Perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
grep -cx '\s*' file
ou
grep -cx '[[:space:]]*' file
C'est plus rapide que le code dans la réponse de Steve.
Pour compter le nombre de lignes vides inutiles que votre collègue a insérées dans un projet, vous pouvez lancer une commande d'une ligne comme celle-ci:
blankLinesTotal=0; for file in $( find . -name "*.cpp" ); do blankLines=$(grep -cvE '\S' ${file}); blankLinesTotal=$[${blankLines} + ${blankLinesTotal}]; echo $file" has" ${blankLines} " empty lines." ; done; echo "Total: "${blankLinesTotal}
Cela imprime:
<filename0>.cpp #blankLines
....
....
<filenameN>.cpp #blankLines
Total #blankLinesTotal
grep -v '\S' | wc -l
(Sous OSX, les expressions Perl ne sont pas disponibles, option -P)