GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Un utilisateur expérimenté de Linux sait exactement quel genre de lignes vides gênantes peuvent se trouver dans un fichier exploitable. Ces lignes vides/vides entravent non seulement le traitement correct de ces fichiers, mais rendent également difficile la lecture et l'écriture du fichier par un programme en cours d'exécution.

Sur un environnement de système d'exploitation Linux, il est possible d'implémenter plusieurs expressions de manipulation de texte pour se débarrasser de ces lignes vides/blanches d'un fichier. Dans cet article, les lignes vides/blanches font référence aux caractères d'espacement.

Créer un fichier avec des lignes vides/vides sous Linux

Nous devons créer un fichier de référence avec des lignes vides/vides. Nous le modifierons plus tard dans l'article à travers plusieurs techniques dont nous parlerons. Depuis votre terminal, créez un fichier texte de votre choix avec un nom comme "i_have_blanks " et remplissez-le avec des données et des espaces vides.

$ nano i_have_blanks.txt
Or
$ vi i_have_blanks.txt

Tout au long de l'article, nous afficherons le contenu d'un fichier sur notre terminal en utilisant la commande cat pour un référencement flexible.

$ cat i_have_blanks.txt

Les trois commandes Linux qui nous propulseront vers une solution idéale à ce problème de lignes vides/vides sont grep, sed et awk .

Par conséquent, créez trois copies de votre i_have_blanks.txt fichier et enregistrez-les sous des noms différents afin que chacun puisse être pris en charge par l'une des trois commandes Linux indiquées.

Via regex (expressions régulières ), nous pouvons identifier les lignes vides avec le caractère standard POSIX “[:space:]” .

Comment supprimer les lignes vides/vides dans les fichiers

Avec cet énoncé de problème, nous envisageons l'élimination de toutes les lignes vides/vides existantes d'un fichier lisible donné à l'aide des commandes suivantes.

1. Supprimer les lignes vides à l'aide de la commande Grep

L'utilisation prise en charge des classes de caractères abrégés peut réduire la commande grep à une commande simple comme :

$ grep -v '^[[:space:]]*$' i_have_blanks.txt
OR
$ grep '\S' i_have_blanks.txt

Pour corriger un fichier avec des lignes vides/vides, la sortie ci-dessus doit passer par un fichier temporaire avant d'écraser le fichier d'origine.

$ grep '\S' i_have_blanks.txt > tmp.txt 
$ mv tmp.txt i_have_blanks.txt
$ cat i_have_blanks.txt

Comme vous pouvez le voir, toutes les lignes vides qui espacaient le contenu de ce fichier texte ont disparu.

2. Supprimer les lignes vides à l'aide de la commande Sed

Le d l'action dans la commande lui dit de supprimer tout espace blanc existant d'un fichier. Le mécanisme de correspondance et de suppression des lignes vides de cette commande peut être représenté de la manière suivante.

$ sed '/^[[:space:]]*$/d' i_have_blanks_too.txt

La commande ci-dessus parcourt les lignes du fichier texte à la recherche de caractères non vides et supprime tous les autres caractères restants. Grâce à sa prise en charge des classes de caractères non vides, la commande ci-dessus peut être simplifiée comme suit :

$ sed '/\S/!d' i_have_blanks_too.txt

De plus, en raison de la prise en charge de l'édition sur place de la commande, nous n'avons pas besoin d'un fichier temporaire pour conserver temporairement notre fichier converti avant d'écraser le fichier texte d'origine comme dans le cas de la commande grep. Vous devez cependant utiliser cette commande avec un -i option comme argument.

$ sed -i '/\S/!d' i_have_blanks_too.txt i_have_blanks_too.txt 
$ cat i_have_blanks_too.txt

3. Supprimer les lignes vides à l'aide de la commande Awk

La commande awk exécute une vérification des caractères non blancs sur chaque ligne d'un fichier et ne les imprime que si cette condition est vraie. La flexibilité de cette commande s'accompagne de divers itinéraires d'implémentation. Sa solution simple est la suivante :

$ awk '!/^[[:space:]]*$/' i_have_blanks_first.txt

L'interprétation de la commande ci-dessus est simple, seules les lignes de fichier qui n'existent pas en tant qu'espaces blancs sont imprimées. La version longue de la commande ci-dessus ressemblera à ceci :

$ awk '{ if($0 !~ /^[[:space:]]*$/) }' i_have_blanks_first.txt

Grâce à awk prise en charge de la classe de caractères non vides, la commande ci-dessus peut également être représentée de la manière suivante :

$ awk -d '/\S/' i_have_blanks_first.txt

Le -d une option permet de awk vider les lignes finales du fichier sur le terminal système. Comme vous pouvez le voir, le fichier n'a plus d'espaces blancs.

Les trois ont discuté et mis en œuvre des solutions pour traiter les lignes vides des fichiers via grep , sed , et awk nous permettront d'implémenter des opérations de lecture et d'écriture de fichiers stables et efficaces sur un système Linux.


Linux
  1. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  2. Comment chiffrer et déchiffrer des fichiers/dossiers sous Linux à l'aide de GnuPG

  3. Comment supprimer les N premières lignes d'un fichier Ascii à l'aide des commandes Shell ?

  4. Comment rechercher et supprimer des répertoires et des fichiers vides sous Unix

  5. wget vs curl :comment télécharger des fichiers à l'aide de wget et curl

Comment tronquer des fichiers (vides) sous Linux

Tout sur les fichiers tar et comment tar, décompresser des fichiers sous Linux à l'aide du terminal

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux

Tutoriel Unix Sed :Supprimer des lignes de fichier à l'aide d'adresses et de modèles

Supprimer les lignes vides dans un fichier texte via grep