GNU/Linux >> Tutoriels Linux >  >> Linux

Suppression de lignes spécifiques d'un fichier dans la ligne de commande Linux

La tâche est simple. Vous devez supprimer des lignes spécifiques d'un fichier texte dans un terminal Linux.

Vous pouvez utiliser un éditeur de texte comme Vim ou Nano, entrez le fichier et supprimez les lignes souhaitées. Cependant, cette approche n'est pas adaptée à l'automatisation à l'aide de scripts bash.

Au lieu de cela, vous pouvez utiliser le puissant éditeur de ligne de commande sed et supprimer les lignes qui correspondent à des critères spécifiques. Et bien sûr, vous pouvez utiliser sed dans vos scripts shell.

Permettez-moi de vous montrer quelques cas d'utilisation.

⚠️Les exemples présentés ici modifieront instantanément le fichier d'origine. Ce serait une bonne idée de faire une sauvegarde de ce fichier avant de commencer à l'expérimenter.

Supprimer la nième ligne du fichier

Imaginez que vous deviez supprimer le 7ème numéro de ligne dans un fichier. Vous pouvez utiliser la commande sed comme ceci :

sed -i '7d' filename

Laissez-moi vous expliquer comment cela fonctionne :

  • -i :Cette option active l'édition sur place. Par défaut, sed n'affichera que la sortie. Avec ce -i option, il modifie le fichier réel sans l'afficher à l'écran.
  • 7d :Ici 7 est le numéro de ligne et d ordonne la suppression de la ligne.
  • filename :Il s'agit du fichier que vous souhaitez modifier. Vous pouvez également fournir un chemin absolu ou relatif si le fichier se trouve dans un autre répertoire.

Permettez-moi de montrer avec un exemple réel. Voici un exemple de fichier texte nommé agatha.txt :

The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies

Pour supprimer la 4ème ligne de ce fichier, j'utilise :

sed '4d' agatha.txt

Cela se traduira par l'affichage suivant avec la ligne 'Giant's Bread' supprimée :

The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies

Supposons maintenant que vous souhaitiez supprimer la première ligne du fichier dans la ligne de commande Linux. Utilisez sed comme ceci :

sed -i '1d' filename
💡Si vous voulez voir le résultat de la manipulation sans modifier le fichier lui-même, n'utilisez pas le -i option de la commande sed.

Supprimer la dernière ligne à l'aide de sed

Vous avez appris à supprimer une ligne particulière, mais que se passe-t-il si vous devez supprimer la dernière ligne ?

Vous pouvez toujours obtenir le nombre total de lignes dans un fichier à l'aide de la commande wc et utiliser ce nombre avec sed. Cependant, sed a un moyen dédié de supprimer la dernière ligne d'un fichier. Vous n'avez plus à vous soucier du nombre de fichiers maintenant.

sed -i '$d' filename.txt

Supprimer une plage de lignes

Semblable à ce que vous avez vu précédemment, vous pouvez également supprimer une plage de lignes du fichier.

Supposons que vous deviez supprimer les lignes de 11 à 15, vous pouvez fournir la plage comme ceci :

sed -i '11,15d' filename

Notez que cela supprimera également les lignes 11 et 15, pas seulement les lignes qui se trouvent entre elles.

Supprimer les lignes contenant une chaîne

Vous pouvez également utiliser sed pour supprimer toutes les lignes contenant une chaîne donnée ou correspondant à un modèle spécifique.

La commande ci-dessous supprimera toutes les lignes contenant le mot 'string' :

sed -i '/string/d' filename

Notez qu'il s'agit d'une recherche sensible à la casse. Vous pouvez également utiliser un modèle regex au lieu d'une chaîne normale.

Supprimer les lignes commençant par un mot

Si vous souhaitez supprimer toutes les lignes commençant par un mot ou une lettre en particulier, il vous suffit de fournir le modèle regex comme ceci :

sed -i '/^word/d' filename

Astuce bonus :supprimez toutes les lignes vides

Avant de terminer cet article, permettez-moi de vous expliquer rapidement comment vous pouvez supprimer toutes les lignes vides à l'aide de sed :

sed -i '/^$/d' filename

J'espère que vous trouverez cette astuce rapide utile pour supprimer des lignes d'un fichier texte dans la ligne de commande Linux.

Si vous êtes intéressé, apprenez-en plus sur l'éditeur de ligne de commande sed :


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

  2. Utilisation de Google Drive à partir de la ligne de commande Linux

  3. Comment afficher des lignes spécifiques d'un fichier dans la ligne de commande Linux

  4. Comment puis-je créer un fichier avec une taille spécifique à partir d'une ligne de commande ?

  5. Linux - grep de certaines lignes à la fin du fichier

Comment extraire ou décompresser des fichiers tar.gz à partir de la ligne de commande Linux

Coller la commande sous Linux (fusionner les lignes)

Commande Diff sous Linux avec exemples

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Comment mélanger les lignes dans un fichier sous Linux

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