Recherche de site Web

15 conseils de commande Sed pour les tâches d'administration système Linux


Chaque administrateur système doit gérer quotidiennement des fichiers en texte brut. Savoir comment afficher certaines sections, comment remplacer des mots et comment filtrer le contenu de ces fichiers sont des compétences que vous devez avoir à portée de main sans avoir à effectuer une recherche sur Google.

Dans cet article, nous passerons en revue sed, l'éditeur de flux bien connu, et partagerons 15 conseils pour l'utiliser afin d'atteindre les objectifs mentionnés précédemment, et bien plus encore.

Qu'est-ce que la commande Sed ?

La commande « sed », abréviation de Stream Editor, est un outil de manipulation de texte polyvalent et puissant qui fonctionne sur des flux de texte, permettant aux utilisateurs d'effectuer diverses opérations sur les données, telles que rechercher, remplacer, insérer et supprimer. « Sed » utilise des expressions régulières pour définir des modèles de manipulation de texte et peut être utilisé pour des tâches d'édition par lots et le traitement de texte dans des scripts.

L'une de ses fonctionnalités notables est l'édition sur place, où il peut modifier des fichiers directement ou créer des copies de sauvegarde tout en apportant des modifications. « Sed » est un outil essentiel pour les administrateurs système, les programmeurs et toute personne chargée des tâches de transformation de texte et de manipulation de données en ligne de commande.

Voici quelques commandes « sed » courantes avec des exemples :

1. Affichage d'une plage de lignes d'un fichier

Des outils tels que head et tail nous permettent de visualiser le bas ou le haut d'un fichier. Et si nous devons afficher une section au milieu ? Le one-liner sed suivant renverra les lignes 5 à 10 à partir de tecmint.txt :

sed -n '5,10p' tecmint.txt

2. Affichage de l'intégralité du fichier à l'exception d'une plage donnée

D’un autre côté, il est possible que vous souhaitiez imprimer l’intégralité du fichier à l’exception d’une certaine plage. Pour exclure les lignes 20 à 35 du tecmint.txt, procédez :

sed '20,35d' myfile.txt

3. Affichage des lignes et des plages non consécutives

Il est possible que vous soyez intéressé par un ensemble de lignes non consécutives, ou par plusieurs plages. Affichons les lignes 5-7 et 10-13 du tecmint.txt :

sed -n -e '5,7p' -e '10,13p' tecmint.txt

Comme vous pouvez le voir, l'option -e nous permet d'exécuter une action donnée (dans ce cas, imprimer des lignes) pour chaque plage.

4. Remplacement de mots ou de chaînes dans un fichier

Pour remplacer chaque instance du mot version par story dans tecmint.txt, procédez :

sed 's/version/story/g' tecmint.txt

De plus, vous souhaiterez peut-être envisager d'utiliser gi au lieu de g afin d'ignorer la casse des caractères :

sed 's/version/story/gi' myfile.txt

Pour remplacer plusieurs espaces vides par un seul espace, nous utiliserons le résultat de la commande ip route show avec un pipeline :

ip route show | sed 's/  */ /g'

Comparez le résultat de ip route show avec et sans le pipeline :

5. Remplacement de mots ou de chaînes à l'intérieur d'une plage

Si vous souhaitez remplacer des mots uniquement dans une plage de lignes (30 à 40, par exemple), vous pouvez :

sed '30,40 s/version/story/g' tecmint.txt

Bien entendu, vous pouvez indiquer une seule ligne via son numéro correspondant au lieu d’une plage.

6. Supprimer les commentaires d'un fichier

Parfois, les fichiers de configuration sont chargés de commentaires. Bien que cela soit certainement utile, il peut parfois être utile d'afficher uniquement les directives de configuration si vous souhaitez toutes les visualiser d'un seul coup d'œil.

Pour supprimer les lignes vides ou celles commençant par # du fichier de configuration Apache, faites :

sed '/^#\|^$\| *#/d' httpd.conf

Le signe caret est suivi du signe dièse (^#) indique le début d'une ligne, tandis que ^$ représente des lignes vides. Les barres verticales indiquent des opérations booléennes, tandis que la barre oblique inverse est utilisée pour échapper aux barres verticales.

Dans ce cas particulier, le fichier de configuration Apache contient des lignes avec des #'s pas au début de certaines lignes, donc *# est également utilisé pour les supprimer.

7. Remplacer un mot insensible à la casse dans un fichier

Pour remplacer un mot commençant par une majuscule ou une minuscule par un autre mot, on peut également utiliser sed. Pour illustrer, remplaçons le mot zip ou Zip par rar dans tecmint.txt :

sed 's/[Zz]ip/rar/g' tecmint.txt

8. Recherche d'un événement spécifique dans un fichier journal

Une autre utilisation de sed consiste à imprimer les lignes d'un fichier qui correspondent à une expression régulière donnée. Par exemple, nous pourrions être intéressés par les activités d'autorisation et d'authentification qui ont eu lieu le 2 juillet, selon le /var /log/secure se connecte à un serveur CentOS.

Dans ce cas, le modèle à rechercher est 2 juillet au début de chaque ligne :

sed -n '/^Jul  1/ p' /var/log/secure

9. Insertion d'espaces ou de lignes vides dans un fichier

Avec sed, nous pouvons également insérer des espaces (lignes vierges) pour chaque ligne non vide d'un fichier. Pour insérer une ligne vide toutes les deux lignes dans LICENSE, un fichier texte brut, procédez :

sed G tecmint.txt

Pour insérer deux lignes vides, faites :

sed 'G;G' tecmint.txt

Ajoutez un G majuscule séparé par un point-virgule si vous souhaitez ajouter plus de lignes vides. L'image suivante illustre l'exemple décrit dans cette astuce :

Cette astuce peut s'avérer utile si vous souhaitez inspecter un fichier de configuration volumineux. Insérer un espace vide toutes les deux lignes et diriger la sortie vers moins se traduira par une expérience de lecture plus conviviale.

10. Suppression de ^M dans un fichier

Le programme dos2unix convertit les fichiers texte brut du formatage Windows/Mac vers Unix/Linux, en supprimant les caractères de nouvelle ligne cachés insérés par certains éditeurs de texte utilisés sur ces plates-formes. S'il n'est pas installé sur votre système Linux, vous pouvez imiter ses fonctionnalités avec sed au lieu de l'installer.

Dans l'image de gauche, nous pouvons voir plusieurs caractères de nouvelle ligne DOS (^M), qui ont ensuite été supprimés avec :

sed -i 's/\r//' myfile.txt

Veuillez noter que l'option -i indique une édition sur place. Ensuite, les modifications ne seront pas renvoyées à l'écran mais seront enregistrées dans le fichier.

Remarque : Vous pouvez insérer des caractères de nouvelle ligne DOS lors de l'édition d'un fichier dans l'éditeur Vim avec Ctrl+V et Ctrl+M.

11. Créez un fichier de sauvegarde avec la commande Sed

Dans l'astuce précédente, nous avons utilisé sed pour modifier un fichier mais n'avons pas enregistré le fichier d'origine. Parfois, c'est une bonne idée de sauvegarder une copie de sauvegarde du fichier original au cas où.

Pour ce faire, indiquez un suffixe après l'option -i (entre guillemets simples) à utiliser pour renommer le fichier d'origine.

Dans l'exemple suivant, nous remplacerons toutes les instances de this ou This (en ignorant la casse) par celle de myfile.txt, et nous enregistrerons le fichier d'origine sous le nom myfile.txt.orig.

Enfin, nous utiliserons l'utilitaire diff pour identifier les différences entre les deux fichiers :

sed -i'.orig' 's/this/that/gi' myfile.txt

12. Changer de paires de mots dans un fichier

Supposons que vous ayez un fichier contenant les noms complets au format Prénom, Nom. Pour traiter correctement le fichier, vous souhaiterez peut-être permuter le Nom et le Prénom.

Nous pouvons le faire assez facilement avec sed :

sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

Dans l'image ci-dessus, nous pouvons voir que les parenthèses, qui sont des caractères spéciaux, doivent être échappées, tout comme les nombres 1 et 2.

Ces nombres représentent les expressions régulières en surbrillance (qui doivent apparaître entre parenthèses) :

  • 1 représente le début de chaque ligne jusqu'à la virgule.
  • 2 est un espace réservé pour tout ce qui se trouve à droite de la virgule jusqu'à la fin de la ligne.

La sortie souhaitée est indiquée au format SecondColumn (Nom) + virgule + espace + FirstColumn (Prénom). N'hésitez pas à le changer comme vous le souhaitez.

13. Remplacement des mots uniquement si une correspondance distincte est trouvée

Parfois, remplacer toutes les instances d’un mot donné, ou quelques-unes au hasard, n’est pas exactement ce dont nous avons besoin. Nous devrons peut-être effectuer le remplacement si une correspondance distincte est trouvée.

Par exemple, nous pouvons vouloir remplacer start par stop uniquement si le mot services se trouve dans la même ligne. Dans ce scénario, voici ce qui se passera :

We need to start partying at work,
but let’s remember to start all services first.

Dans la première ligne, start ne sera pas remplacé par stop puisque le mot services n'apparaît pas dans cette ligne, contrairement à la deuxième ligne.

sed '/services/ s/start/stop/g' msg.txt

14. Effectuer deux substitutions ou plus à la fois

Vous pouvez combiner deux substitutions ou plus en une seule commande sed. Remplaçons les mots that et line dans myfile.txt par This et verse, respectivement.

Notez comment cela peut être fait en utilisant une commande de substitution sed ordinaire suivie d'un point-virgule et d'une deuxième commande de substitution :

sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Cette astuce est illustrée dans l'image suivante :

15. Combinaison de Sed et d'autres commandes

Bien entendu, sed peut être combiné avec d'autres commandes Linux afin de créer des commandes plus puissantes. Par exemple, utilisons l'exemple donné dans le CONSEIL #4 et extrayons notre adresse IP de la sortie de la commande ip route.

Nous commencerons par imprimer uniquement la ligne où se trouve le mot src. Ensuite, nous convertirons plusieurs espaces en un seul. Enfin, nous supprimerons le 9ème champ (en considérant un seul espace comme séparateur de champ), où se trouve l'adresse IP :

ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

L'image ci-dessous illustre chaque étape de la commande ci-dessus :

Résumé

Dans ce guide, nous avons partagé 15 trucs et astuces sed pour vous aider dans vos tâches quotidiennes d'administration système. Y a-t-il une autre astuce que vous utilisez régulièrement et que vous aimeriez partager avec nous et le reste de la communauté ?

Si tel est le cas, n'hésitez pas à nous le faire savoir en utilisant le formulaire de commentaires ci-dessous. Les questions et commentaires sont également les bienvenus – nous sommes impatients de vous entendre !