web-dev-qa-db-fra.com

Compter le nombre de lignes vides dans un fichier

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.

35
Sudar

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 correspondantes

Si votre grep ne prend pas en charge -P option, veuillez utiliser -E '[^[:space:]]'

54
kev

Une façon d'utiliser grep:

grep -c "^$" file

Ou avec des espaces:

grep -c "^\s*$" file 
21
Steve

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.

Tester

$ 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
2
fedorqui

Utilisation de Perl one-liner:

Perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
2
Majid Azimi

grep -cx '\s*' file

ou

grep -cx '[[:space:]]*' file

C'est plus rapide que le code dans la réponse de Steve.

2
jarno

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
1
Luca Davanzo
grep -v '\S' | wc -l

(Sous OSX, les expressions Perl ne sont pas disponibles, option -P)

0
Roy