Maison >Tutoriel système >Linux >Résumé complet : explication détaillée du traitement multiligne Linux sed

Résumé complet : explication détaillée du traitement multiligne Linux sed

WBOY
WBOYavant
2024-01-05 16:11:491121parcourir

Dans des circonstances normales, sed lit la ligne à traiter dans l'espace de modèle et les commandes du script traitent la ligne l'une après l'autre jusqu'à ce que le script soit exécuté, puis la ligne est sortie et l'espace de modèle est vide, puis répétez ; Avec l'action qui vient d'être effectuée, une nouvelle ligne du fichier est lue jusqu'à ce que le fichier soit complètement traité. Cependant, diverses raisons, telles que l'espoir de l'utilisateur qu'une certaine commande du script soit exécutée dans certaines conditions, ou l'espoir que l'espace de modèle soit conservé pour le prochain traitement, peuvent amener sed à ne pas suivre les instructions lors du traitement des fichiers Carry. le processus normal. À l'heure actuelle, sed a mis en place des commandes avancées pour répondre aux besoins des utilisateurs. Si vous souhaitez apprendre les commandes avancées de sed, vous devez d'abord comprendre les deux zones de cache suivantes :

1. Définition de l'espace de modèle : l'espace de modèle est une zone tampon qui enregistre ce que sed vient de lire depuis l'extrémité d'entrée.
2. Définition de l'espace de conservation : l'espace de conservation est utilisé pour mettre temporairement en cache les données lors du traitement des données de l'espace de modèle.

Il existe également plusieurs paramètres de commande :

g : copiez le contenu de l'espace de conservation dans l'espace de motif et effacez le contenu original dans l'espace de motif
G : Ajoutez le contenu de l'espace de maintien à l'espace de motif
h : Copiez le contenu de l'espace de motif vers l'espace de conservation, et le contenu de l'espace de conservation d'origine est effacé
H : Ajoutez le contenu de l'espace de motif à l'espace de maintien
x : échangez le contenu de l'espace de motif et maintenez l'espace

Par exemple, nous souhaitons inverser le contenu d'un fichier. Le fichier est le suivant :

[qiu.li@l-tdata1.tkt.cn6 ~]$ cat tmp 
1-line
2-line
3-line

Exécutez la commande suivante :

[qiu.li@l-tdata1.tkt.cn6 ~]$ sed '2,$G;h;$!d' tmp
3-line
2-line
1-line

Comprenons progressivement le processus d'exécution ci-dessus

1. Analysons les trois commandes suivantes :

  • 2,$G : Exécuter la commande G de la deuxième ligne à la dernière ligne
  • h : Exécuter la commande h
  • $!d : Supprimer toutes les lignes sauf la dernière ligne

2. Opérations spécifiques

  1. Scanner jusqu'à la première ligne
    1. Mettez 1 ligne dans l'espace de motif ; à ce moment, l'espace de motif est toujours à 1 ligne ;
    2. Exécutez la commande h directement, l'espace de stockage temporaire est actuellement d'une ligne
    3.  ;
    4. Exécutez la commande d pour supprimer la seule ligne de données dans l'espace de modèle. Après la suppression, l'espace de modèle est vide
    5. .
  2. Scan vers la deuxième ligne
    1. Mettez 2 lignes dans l'espace de motif
    2. Exécutez la commande G pour ajouter la 1 ligne de l'espace temporaire à l'arrière de la 2 lignes de l'espace motif. À ce stade, l'espace motif est 2 lignes 1 ligne ;
    3. Exécutez la commande h, le contenu de l'espace de stockage temporaire est 2-linen1-line ;
    4. Exécutez la commande d et l'espace de motif sera effacé
    Scan vers la troisième ligne
  3. Mettez 3 lignes dans l'espace de motif,
    1. Exécutez la commande G pour ajouter 2-lin1-line dans l'espace temporaire à l'arrière de 3-line dans l'espace de motif. À ce stade, l'espace de motif est 3-lin2-linn1-line ;
    2. .
    3. Exécutez la commande h, le contenu de l'espace de stockage temporaire est 3-linen2-linen1-line ;
    4. Ne pas exécuter $!d;
    5. Sortie directe 3-lin2-lin1-ligne
  4. Bien entendu, la commande : sed '1!G;h;$!d' tmp peut aussi avoir cet effet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer