Sed est un programme UNIX simple. Il ne crée ni ne modifie de fichiers. Il ne modifie que les données qui transitent par son entrée et présente les données modifiées sur sa sortie. Malgré cela, sed est considéré comme l’un des utilitaires UNIX les plus puissants que vous rencontrerez sous Linux, en particulier lorsqu’il est combiné avec d’autres programmes de votre système.

Cet article vise à enseigner les bases de l’utilisation de ce petit programme. En outre, il donnera également un bref aperçu de la Philosophie UNIX et comment cette idée est importante pour comprendre le fonctionnement de votre ordinateur.

Qu’est-ce que la philosophie UNIX ?

La philosophie UNIX est l’idée qu’un programme ne doit faire qu’une seule tâche et bien la faire. Il vous encourage à écrire des programmes simples que vous pouvez réutiliser pour différentes fonctions au lieu de créer des programmes complexes que vous ne pouvez pas réutiliser pour d’autres tâches.

Un bon exemple en est le programme cat. Il s’agit d’un utilitaire simple qui ne prend que des entrées et les imprime sous forme de flux de texte.

Sed Basics 03 Échantillon de chat 2

La philosophie UNIX vous permet d’utiliser le programme en conjonction avec d’autres utilitaires du système. À son tour, cette approche crée finalement une interface unique pour votre système que vous pouvez apprendre une fois et réutiliser pour différents contextes.

Par exemple, vous pouvez envoyer un flux de chat à un programme tel que grep. Il s’agit d’un programme simple qui ne fait qu’une seule chose. Il recherche une chaîne de texte dans une entrée et imprime les lignes où ce texte apparaît.

Sed Basics 04 Exemple de tuyau Grep

D’autre part, vous pouvez à la place envoyer le même flux de chat à un téléavertisseur d’écran comme less. Ceci, à son tour, vous permettra de faire défiler le flux comme s’il s’agissait d’un seul fichier texte.

Sed Basics 05 Échantillon moins de tuyaux

Comment fonctionne SED ?

Cela étant dit, sed est un programme qui lit un flux de texte et le modifie. Cependant, sed ne modifie que le flux de texte, ce qui signifie qu’il ne modifie pas directement les fichiers de votre ordinateur. Cela peut être déroutant pour un débutant car toute modification que vous apportez à sed n’apparaîtra pas sur le disque.

Malgré cela, sed reste un utilitaire puissant. Par exemple, vous pouvez exécuter la ligne suivante pour lire la sortie du printf commande:

Sed Basics 08 Commande de lecture Sed

Les bases de l’utilisation de Sed

Sachant cela, il est incroyablement facile d’utiliser sed pour les tâches de base. Considérez l’exemple suivant :

Sed Basics 09 Lire le fichier

En cela, j’ai utilisé le n commande pour imprimer le contenu du fichier « hello ».

1. Sélection et découpage des flux de texte

De plus, vous pouvez également indiquer à sed de modifier ce flux de texte. Par exemple, vous pouvez utiliser le 2q commande pour lui dire de n’imprimer que les deux premières lignes du fichier « hello »:

Principes de base de Sed 10 Imprimer les premières lignes 1

Cela peut être extrêmement utile si vous ne souhaitez obtenir que les premières lignes d’un fichier texte. Cependant, vous pouvez également utiliser le p commande pour indiquer à sed de n’imprimer qu’une plage de lignes dans un fichier.

Sed Basics 11 Imprimer les lignes médianes

Dans l’exemple ci-dessus, j’ai utilisé sed pour imprimer les troisième et quatrième lignes du fichier « hello ». Vous pouvez également utiliser le même p commande pour imprimer des lignes non adjacentes dans votre fichier texte. Considérez l’exemple suivant :

Sed Basics 12 Imprimer des lignes non adjacentes

Avec cela, je dis à sed de n’imprimer que la première et la quatrième ligne du fichier « hello ». Cela peut être utile si vous souhaitez combiner plusieurs lignes de différents flux dans un seul fichier.

Par exemple, vous pouvez utiliser sed avec le > opérateur pour écrire le flux modifié dans un fichier.

Sed Basics 13 Écrire des lignes non adjacentes dans un fichier

2. Suppression de texte

Une autre grande fonction de sed consiste à supprimer du texte dans un flux. Contrairement à l’impression, cela vous permet de sélectionner les lignes de texte que vous souhaitez que sed omette du flux.

Par exemple, j’ai utilisé le d commande pour supprimer la deuxième et la cinquième ligne du fichier hello.

Sed Basics 14 Supprimer des lignes

L’un des avantages de l’utiliser au lieu du p commande est que cela vous permet de supprimer uniquement la ligne que vous ne voulez pas. Ceci est utile si vous souhaitez nettoyer un fichier volumineux ou découper une sortie pour afficher uniquement les informations dont vous avez besoin.

3. Ajouter un nouveau texte

Avec cela, vous pouvez également utiliser sed avec lui-même pour inclure de nouvelles données dans votre flux de texte. Par exemple, vous pouvez utiliser le a commande pour ajouter une ligne de texte au flux actuel :

Sed Basics 15 Ajouter des lignes

De plus, il est également possible d’inclure des fichiers entiers dans un flux de texte. Pour ce faire, vous pouvez utiliser le r commande qui vous permettra de lire un seul fichier dans votre flux actuel. Pour ce faire, vous pouvez exécuter la commande suivante pour inclure le fichier de bienvenue après la deuxième ligne de hello.

Sed Basics 16 Ajouter un fichier à la ligne

4. Substitution de texte et manipulation de flux

Une utilisation brillante de sed consiste à modifier des flux existants. C’est lorsque vous prenez un flux d’entrée de texte et utilisez les fonctions intégrées de sed pour modifier le contenu du flux.

C’est sans doute la fonction la plus puissante de sed. Cela vous donne la possibilité de modifier dynamiquement les données lors de leur passage dans les canaux. Par exemple, vous pouvez facilement modifier la sortie d’un programme comme s’il s’agissait d’un fichier texte :

Principes de base de Sed 17 Modifier la sortie de la commande

Dans cet exemple, j’ai utilisé le s commande pour remplacer le mot « monde » par « site web ». Contrairement aux commandes précédentes, cependant, cette commande utilise une syntaxe spécifique pour fonctionner correctement.

Sachant cela, la forme générale de la s commande ressemble à ceci :

  • La première colonne indique qu’il s’agit d’une commande de substitution. Dans la plupart des cas, vous n’aurez qu’à utiliser le s commande pour modifier un flux de texte.
  • La deuxième colonne indique le mot que vous souhaitez remplacer à l’aide d’expressions régulières structurelles. C’est une façon de décrire les mots et la grammaire en utilisant des règles générales. Par exemple, vous pouvez décrire les mots « estampes », « prince » et « amorce » en écrivant pri[n,m]...
  • La troisième colonne décrit le mot que vous voulez que l’ancienne chaîne soit. Contrairement à la colonne précédente, cette colonne n’utilise pas d’expressions régulières. Au lieu de cela, vous pouvez utiliser du texte brut pour décrire votre nouveau mot.
  • La dernière colonne indique à sed d’appliquer toutes les options supplémentaires dont vous avez besoin pour une substitution. En cela, le drapeau le plus courant que vous pourriez vouloir utiliser est g. Cela indique que la commande remplacera chaque instance de la regex par la nouvelle chaîne.

5. Utilisation de la substitution de texte avec des fichiers

Vous pouvez appliquer le s commande pour manipuler n’importe quel type de flux de texte que vous voulez. Ceci est utile non seulement parce qu’il vous permet de modifier des données à la volée, mais aussi parce que vous pouvez l’utiliser avec presque n’importe quoi dans la ligne de commande Linux.

Par exemple, vous pouvez utiliser le s commande avec un fichier texte en ajoutant le nom du fichier à la fin de la commande :

Sed Basics 18 Modifier un seul mot de fichier

En cela, je dis à sed de lire le fichier « hello » et de remplacer la première instance du mot « hello » par « welcome ». Je peux ensuite le faire pour chaque instance du mot « bonjour » dans le fichier en ajoutant le g option:

Sed Basics 19 Modifier le fichier tous les mots

Questions fréquemment posées

Est-il possible d’écrire des modifications dans un fichier en utilisant sed ?

Oui! Outre l’utilisation d’opérateurs de fichiers, il est possible d’utiliser sed pour écrire directement n’importe quel flux de texte modifié dans un fichier. Pour ce faire, vous pouvez soit utiliser sed avec le -i signaler ou utiliser le w commande pour écrire le flux dans un fichier.

Une chose importante à noter, cependant, est que ces commandes ne sont pas conformes à la norme POSIX. Cela signifie que ceux-ci ne fonctionneront pas si vous utilisez une version non GNU de sed.

J’obtiens une erreur « non terminée » chaque fois que j’utilise sed. Mon installation est-elle cassée ?

Pas du tout! Il s’agit d’un problème qui se produit lorsque vous n’écrivez pas correctement une commande sed. Ceci est courant avec les commandes de substitution où vous essayez de faire correspondre ou de remplacer une chaîne par des espaces.

Par exemple, l’exécution de la commande suivante entraînera une erreur « non terminée » : sed s/hello/welcome back/g hello.txt.

Vous pouvez résoudre ce problème en ajoutant le caractère d’échappement « \ » avant vos espaces. Il s’agit d’un caractère spécial qui indique à sed d’inclure l’espace lors de la recherche ou du remplacement de texte.

Avec cela, la version correcte de la commande ci-dessus ressemble à ceci : sed s/hello/welcome\ back/g hello.txt.

Mis à part « g », y a-t-il d’autres drapeaux que je peux utiliser avec la commande « s » ?

Oui! À part gvous pouvez également utiliser le p flag pour dire à sed d’afficher toutes les lignes modifiées.

Un autre drapeau que vous pouvez utiliser avec s est e. Cela vous permet d’exécuter des commandes shell chaque fois que sed remplace un mot. Par exemple, vous pouvez exécuter la commande suivante pour exécuter touch chaque fois qu’il trouve le mot « bonjour » dans le fichier : sed s/hello\ /touch\ /e hello.txt.

Enfin, vous pouvez également utiliser le i flag pour indiquer à sed d’être insensible à la casse lors de la recherche de correspondances. Ceci est utile si vous souhaitez faire correspondre le même mot mais avec des styles de casse différents. Par exemple, la commande suivante remplacera le mot « bonjour » par « bienvenue » quelle que soit sa casse : sed s/HELLO/welcome/i hello.txt.

Si toutes ces discussions vous ont rendu curieux avec la ligne de commande Linux. Vous pouvez lire notre article précédent où nous parlons de certaines des invites Bash les plus intéressantes que vous pouvez utiliser aujourd’hui.

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici