cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

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 ^$^ 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

ᦿ


ℹ 2006 - 2023 | 🏠 Accueil du domaine | 🏡 Accueil du blog