En bash il existe de nombreuses façons dâeffacer les lignes vides d'un fichier, mais toutes ne sont pas dĂ©pourvues dâeffet de bord.
Le premier rĂ©flexe quâil me vient lorsque je dois retirer une ligne entiĂšre est lâutilisation de grep.
Dans le cas dâune ligne vide on peut Ă©crire l'expression ^$
oĂč ^
indique le début de la ligne et $
la fin.
La commande grep '^$'
nâaffichera que les lignes vides et si on inverse le rĂ©sultat Ă lâaide du drapeau -v
on a tout sauf les lignes vide.
echo -e 'a\n\nb' | grep -v '^$'
En fait, on peut écrire cela plus simplement, sans inverser le résultat, en utilisant : grep '.'
echo -e 'a\n\nb' | grep '.'
Attention, ces solutions ne gÚrent pas le cas des espaces et des tabulations qui sont considérés dans ce cas comme tous les autres caractÚres, si vous souhaitez en tire compte, vous devrez écrire quelque chose de plus sophistiqué comme :
cat le_fichier | grep -v -E '^[^[:blank:]]*$'
Le problĂšme avec grep est quâil change son statut de sortie (« exit status ») Ă 1 (au lieu de zĂ©ro), si aucune ligne nâest sĂ©lectionnĂ©e, ce qui suivant votre environnement peu faire arrĂȘter le script (en particulier si vous souhaitez gĂ©rer finement les erreurs).
Alternative Ă lâaide de « sed »
Une autre solution consiste à utiliser sed, et vous retrouver les 2 cas, on sélectionne les vides ou les lignes non vide :
Ici on sélectionne les lignes vides et on les efface :
sed '/^$/d'
Ici on sélectionne les lignes non-vides et on ne les efface pas (on efface les autres) :
sed '/./!d'
Pour effacer les lignes vides ou ne contenant que des caractÚres blancs, vous pouvez utiliser :
sed '/^[^[:blank:]]*$/d'
Liens
኿