cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, 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 ^$ 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

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog