Vous pouvez avoir des espaces ou des tabulations dans votre ligne "vide". Utiliser les classes POSIX avec sed pour supprimer toutes les lignes contenant uniquement des espaces :
sed '/^[[:space:]]*$/d'
Une version plus courte qui utilise ERE, par exemple avec gnu sed :
sed -r '/^\s*$/d'
(Notez que sed ne fait PAS soutenir PCRE.)
Il me manque le awk solution :
awk 'NF' file
Ce qui renverrait :
xxxxxx
yyyyyy
zzzzzz
Comment cela marche-t-il? Depuis le NF signifie "nombre de champs", ces lignes étant vides ont 0 champs, de sorte que awk évalue 0 à False et aucune ligne n'est imprimée ; cependant, s'il y a au moins un champ, l'évaluation est True et fait awk effectuer son action par défaut :imprimer la ligne courante.
sé
'/^[[:space:]]*$/d''/^\s*$/d''/^$/d'-n '/^\s*$/!p'
grep
.-v '^$'-v '^\s*$'-v '^[[:space:]]*$'
mauvais
/./'NF''length''/^[ \t]*$/ {next;} {print}''!/^[ \t]*$/'
sed '/^$/d' devrait être bon, comptez-vous modifier le fichier en place ? Si c'est le cas, vous devez utiliser le -i drapeau.
Peut-être que ces lignes ne sont pas vides, donc si c'est le cas, regardez cette question Supprimer les lignes vides des fichiers txt, supprimer les espaces au début et à la fin de la ligne Je pense que c'est ce que vous essayez de réaliser.