Comment supprimer des lignes spécifiques d'un fichier à l'aide de sed

Il arrive qu'on ait besoin de supprimer une ligne spécifique d'un ou plusieurs fichiers. Par exemple, j'ai une liste de fichiers et je dois supprimer la ligne 27 de chacun d'eux (il s'agit d'une règle de configuration ACL). Je peux soit modifier chaque fichier individuellement, soit utiliser la commande `sed` et un script Bash (facultatif) pour y parvenir.

Mais essayons un seul fichier un peu simple.

Nous avons le fichier distros-deb.txt qui contient ceci :

debian

Kubuntu

archlinux

solus

menthe

Autrement dit, le fichier distros-deb.txt contient la liste des distributions basées sur Debian. Or, la ligne 3 mentionne « archlinux », une distribution qui n’a manifestement rien à voir avec Debian. Il faut donc la supprimer. Pour ce faire, ajoutez la ligne suivante :

sed "3d" distros-deb.txt > distros-deb-ok.txt

L'explication de cette ligne est simple : `sed "3d"` indique que l'on va supprimer la ligne 3, et `distros-deb.txt` précise le fichier sur lequel effectuer la suppression, c'est-à-dire celui-ci. Jusqu'ici, si l'on appuie sur `Entrée`, le résultat s'affiche dans le terminal. Avec `> distros-deb-ok.txt` , on indique qu'au lieu de l'afficher dans le terminal, le résultat doit être enregistré dans un fichier portant ce nom.

Qu'est-ce qui est simple?

On peut également éviter d'utiliser le fichier > distros-deb-ok.txt en utilisant le paramètre -i de sed.

Autrement dit, si nous voulons supprimer la ligne du fichier et l'enregistrer sous le même nom (et non dans un autre fichier), il nous suffit d'ajouter le paramètre -i :

sed -i "3d" distros-deb.txt

Cela supprimera la ligne n ° 3 de distros-deb.txt et l'enregistrera.

Que faire si je veux une plage de lignes, c'est-à-dire supprimer la ligne # 3 mais aussi # 4 et # 5? Pour y parvenir, nous mettons la plage de 3 à 5, soit:

sed -i "3,5d" distros-deb.txt

Et cela ne me montrera que Debian et Kubuntu 

Alors que faire si je veux supprimer de la ligne 2 à la dernière, alors que je ne connais pas le nombre total de lignes?

Utilisez simplement le symbole du dollar - »$

sed -i "2,$d" distros-deb.txt

Si vous souhaitez éliminer de la première ligne au n ° 4, nous mettons simplement la valeur 1 au début:

sed -i "1,4d" distros-deb.txt

Voilà, c'est à peu près tout ! Une astuce bien pratique pour écrire des scripts Bash afin d'automatiser des tâches et modifier ou supprimer des lignes dans des fichiers de configuration. Pour modifier, on peut utiliser `sed` ou `perl` , et pour supprimer, on sait déjà comment faire avec `sed`.

salutations


Ajouter comme source préférée dans Google