GNU/Linux >> Tutoriels Linux >  >> Linux

Guide complet de commande Sed [expliqué avec des exemples pratiques]

Dans un article précédent, j'ai montré l'utilisation de base de Sed, l'éditeur de flux, sur un cas d'utilisation pratique. Aujourd'hui, préparez-vous à en savoir plus sur Sed, car nous ferons une visite approfondie du modèle d'exécution sed.

Ce sera aussi l'occasion de faire un tour d'horizon exhaustif de toutes les commandes Sed et de plonger dans leurs détails et subtilités.

Alors, si vous êtes prêt, lancez un terminal, téléchargez les fichiers de test et installez-vous confortablement devant votre clavier :nous allons commencer notre exploration dès maintenant !

Un peu de théorie sur Sed

Un premier aperçu du modèle d'exécution sed

Pour vraiment comprendre Sed, vous devez d'abord comprendre le modèle d'exécution de l'outil.

Lors du traitement des données, Sed lit une ligne d'entrée à la fois et la stocke dans le soi-disant espace de modèle . Toutes les transformations de Sed s'appliquent à l'espace du motif. Les transformations sont décrites par des commandes à une lettre fournies sur la ligne de commande ou dans un fichier de script Sed externe. La plupart des commandes Sed peuvent être précédées d'une adresse, ou d'une plage d'adresses, pour limiter leur portée.

Par défaut, Sed imprime le contenu de l'espace de motif à la fin de chaque cycle de traitement, c'est-à-dire juste avant d'écraser l'espace de motif avec la ligne d'entrée suivante. Nous pouvons résumer ce modèle comme suit :

  1. Essayez de lire la ligne d'entrée suivante dans l'espace du modèle

Si la lecture a réussi :

  1. Appliquer dans l'ordre du script toutes les commandes dont l'adresse correspond à la ligne d'entrée actuelle
  2. Si sed n'a pas été lancé en mode silencieux (-n ) affiche le contenu de l'espace de modèle (potentiellement modifié)
  3. revenu à 1.

Étant donné que le contenu de l'espace de motif est perdu après le traitement de chaque ligne, il ne convient pas au stockage à long terme. Pour cela, Sed dispose d'un deuxième tampon, l'espace de maintien . Sed n'efface, ne place ou n'obtient jamais de données de l'espace de conservation à moins que vous ne le demandiez explicitement. Nous étudierons cela plus en profondeur plus tard lors de l'étude des commandes d'échange, d'obtention et de maintien.

La machine abstraite Sed

Le modèle expliqué ci-dessus est ce que vous verrez décrit dans de nombreux tutoriels Sed. En effet, il est suffisamment correct pour comprendre les programmes Sed les plus basiques. Mais lorsque vous commencerez à creuser dans des commandes plus avancées, vous verrez que ce n'est pas suffisant. Alors essayons d'être un peu plus formels maintenant.

En fait, Sed peut être vu comme implémentant une machine abstraite dont l'état est défini par trois tampons, deux registres et deux drapeaux :

  • trois tampons pour stocker du texte de longueur arbitraire. Oui :trois ! Dans le modèle d'exécution de base, nous avons parlé du motif et de l'espace de maintien, mais Sed a un troisième tampon :la file d'attente d'ajout . Du point de vue du script Sed, il s'agit d'un tampon en écriture seule que Sed videra automatiquement à des moments prédéfinis de son exécution (en gros avant de lire une nouvelle ligne à partir de l'entrée, ou juste avant de quitter).
  • Sed tient également deux registres :le compteur de lignes (LC) qui contient le nombre de lignes lues à partir de l'entrée et le compteur de programme (PC) qui contiennent toujours l'index ("position" dans le script) de la prochaine commande à exécuter. Sed incrémente automatiquement le PC dans le cadre de sa boucle principale. Mais à l'aide de commandes spécifiques, un script peut également modifier directement le PC pour sauter ou répéter des parties du programme. C'est ainsi que des boucles ou des instructions conditionnelles peuvent être implémentées avec Sed. Plus d'informations à ce sujet dans la section consacrée aux succursales ci-dessous.
  • Enfin deux drapeaux peut modifier le comportement de certaines commandes Sed :le drapeau d'impression automatique (AP) le drapeau de substitution (SF). Lorsque l'indicateur d'impression automatique est défini , Sed imprimera automatiquement le contenu de l'espace de modèle avant l'écraser (notamment avant de lire une nouvelle ligne d'entrée mais pas seulement). Lorsque l'indicateur d'impression automatique est clair ("not set"), Sed n'imprimera jamais le contenu de l'espace de modèle sans une commande explicite dans le script. Vous pouvez effacer l'indicateur d'impression automatique en exécutant Sed en "mode silencieux" (en utilisant le -n option de ligne de commande ou en utilisant le commentaire spécial #n sur la toute première ligne ou le script). Le "drapeau de substitution" est défini par la commande de substitution (les s commande) lorsque son adresse et son modèle de recherche correspondent au contenu de l'espace de modèle. L'indicateur de substitution est effacé au début de chaque nouveau cycle, ou lorsqu'une nouvelle ligne est lue à partir de l'entrée, ou après qu'un branchement conditionnel a été effectué. Là encore, nous reviendrons sur ce sujet en détail dans la section branches.

De plus, Sed maintient la liste des commandes ayant entré leur plage d'adresses (plus sur celle de la section des adresses de plage) ainsi que quelques descripteurs de fichiers pour lire et écrire des données. Vous trouverez plus d'informations à ce sujet dans la description des commandes de lecture et d'écriture.

Lire l'histoire complète

Le reste de l'article est réservé aux membres LHB Pro. Vous pouvez vous inscrire maintenant pour 50 $ par an pour lire le reste de cet article et obtenir un accès GRATUIT à tous les messages, ebooks et cours vidéo réservés aux membres.

S'abonnerVous avez déjà un compte ?Se connecter
Linux
  1. Soyez trié avec sort en ligne de commande

  2. Manipulation de texte en ligne de commande avec sed

  3. Multi-tâches en ligne de commande avec screenie

  4. Utilisation de plusieurs modèles à la fois avec la commande Sed

  5. Convertir une chaîne en hexadécimal sur la ligne de commande

Comment vérifier la version du système d'exploitation avec la ligne de commande Linux

Les 50 exemples pratiques de la commande SED sous Linux

La commande Wait sous Linux expliquée avec des exemples pratiques

Comment utiliser la puissante commande Xargs sous Linux [expliqué avec des exemples]

Utilisation de la commande Linux sed avec des exemples

Tutoriel Unix Sed :Opération de fichiers multilignes avec 6 exemples pratiques