GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel Unix Sed :6 exemples d'opération de branchement Sed

Cet article fait partie de la série en cours Unix Sed Tips and Tricks.

Comme tout autre langage de programmation, sed fournit également des commandes de branchement spéciales pour contrôler le flux du programme.

Dans cet article, passons en revue les deux types de branchement Sed suivants.

  1. Sed Branche inconditionnelle
  2. Branche conditionnelle Sed

Syntaxe de branche inconditionnelle Sed :

$ sed ':label command(s) b label'
  •  :étiquette – spécification de l'étiquette.
  • commandes – Toute(s) commande(s) sed
  • libellé :n'importe quel nom pour le libellé
  • étiquette b – saute à l'étiquette sans vérifier aucune condition. Si l'étiquette n'est pas spécifiée, saute à la fin du script.

Syntaxe de branche conditionnelle Sed :

$ sed ':label command(s) t label'
  •  :étiquette – spécification de l'étiquette.
  • commandes – Toute(s) commande(s) sed
  • libellé :n'importe quel nom pour le libellé
  • t étiquette – saute à l'étiquette uniquement si la dernière commande de substitution a modifié l'espace du motif. Si l'étiquette n'est pas spécifiée, saute à la fin du script.

Créer un exemple de fichier de test

Créons d'abord le fichier geekstuff.txt qui sera utilisé dans les exemples mentionnés ci-dessous.

$ cat thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
$

Je. Exemples Sed pour une branche inconditionnelle

Sed Exemple 1. Remplacer la première occurrence d'un motif dans un fichier entier

Dans le fichier thegeekstuff.txt remplacez la première occurrence de "Administration" par "Supervision".

$ sed '/Administration/{
 s/Administration/Supervision/
 :loop
 n
 b loop
 }' thegeekstuff.txt
Linux
	Supervision
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
  1. Dans la commande sed ci-dessus, il suffit de lire ligne par ligne et d'imprimer l'espace de modèle jusqu'à ce que l'administration se produise.
  2. Une fois que l'administration a eu lieu, remplacez l'administration par la supervision (une seule occurrence, notez qu'il n'y a pas de drapeau « g » en remplacement).
  3. Une fois la première occurrence remplacée, lisez simplement le contenu du fichier restant et imprimez.
    • "n" est une commande sed qui imprime l'espace du motif et l'écrase avec la ligne suivante.
    • A utilisé "boucle" comme étiquette. "n" imprime la ligne actuelle et écrase l'espace du motif avec la ligne suivante. La boucle b saute à nouveau à la boucle :. Cette boucle imprime donc le contenu restant de thegeekstuff.txt.

Sed Exemple 2. Supprimer les données entre le motif ” ” dans un fichier entier

Dans notre fichier d'exemple, il y a trois lignes entre "".

sed -e ':loop
$!{
N
/\n$/!b loop
}
s/\"[^\"]*\"//g' thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
$
  1. La commande ci-dessus keep ajoute toutes les lignes d'un fichier jusqu'à la fin du fichier.
    •  $ ! – Si ce n'est pas une fin de fichier.
    • N - Ajouter la ligne suivante avec l'espace de modèle délimité par \n
    • /\n$/!b loop – S'il ne s'agit pas de la dernière ligne du fichier, revenez à la boucle.
  2. Maintenant, toutes les lignes seront disponibles dans un espace de motif délimité par une nouvelle ligne. Remplacez toutes les occurrences de données entre ” par le vide.

Sed Exemple 3. Supprimer les balises HTML d'un fichier

Disons que j'ai un fichier avec le contenu html suivant

$ cat index.html
<html><body>
<table
border=2><tr><td valign=top
align=right>1.</td>
<td>Line 1 Column 2</
td>
</table>
</body></html>

La commande sed suivante supprime toutes les balises html du fichier donné

$ sed '/</{
:loop
s/<[^<]*>//g
/</{
N
b loop
}
}' index.html

1.
Line 1 Column 2
  1. Chaque fois qu'une ligne contient '<', supprimez d'abord toutes les balises HTML de cette ligne.
  2. Si maintenant l'espace du motif contient '<', cela implique une balise multi-lignes. Répétez maintenant la boucle suivante :
    • Rejoindre la ligne suivante
    • Supprimez toutes les balises HTML jusqu'à ce qu'il n'y ait plus de « < » unique
  3. Lorsqu'aucun '<' n'existe dans l'espace du motif, nous l'imprimons et commençons un nouveau cycle.

II. Exemples Sed pour la branche conditionnelle

Sed Exemple 4. Si une ligne se termine par une barre oblique inverse, ajoutez-y la ligne suivante.

Notre fichier d'exemple a deux lignes terminées par une barre oblique inverse, nous devons maintenant y ajouter sa ligne suivante.

$ sed '
:loop
/\\$/N
s/\\\n */ /
t loop' thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online Security
Productivity
        Google Search Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
  1. Vérifiez si la ligne se termine par la barre oblique inverse (/\\$/), si oui, lisez et ajoutez la ligne suivante à l'espace de modèle, et remplacez le \ à la fin de la ligne et le nombre d'espaces suivis de cela, avec l'espace unique.
  2. Si la substitution est réussie, répétez l'étape ci-dessus. La branche ne sera exécutée que si la substitution réussit.
  3. Branche conditionnelle principalement utilisée pour les modèles récursifs.

Sed Example 5. Commify une chaîne numérique.

 sed '
 :loop
 s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
 t loop'
12342342342343434
12,342,342,342,343,434
  1. Regroupez les chiffres en deux groupes.
  2. Le premier groupe comprend tous les chiffres jusqu'aux trois derniers chiffres. Les trois derniers chiffres sont capturés dans le 2e groupe.
  3. Ensuite, les deux groupes correspondants sont séparés par une virgule. Ensuite, les mêmes règles sont appliquées à la ligne encore et encore jusqu'à ce que tous les nombres aient été regroupés par groupes de trois.
  4. Par exemple, dans la première itération, ce sera 12342342342343,434
  5. À l'itération suivante, 12342342342 343 434 et continue jusqu'à ce qu'il y ait moins de trois chiffres.

Sed Exemple 6. Formatage :Remplacez chaque espace de tête d'une ligne par "+"

$ sed '
s/^ */&\n/
:loop
s/^\n//;s/ \n/\n+/
t loop' test
Linux
++++++++Administration
++++++++Scripting
++++++++++++++++Tips and Tricks
Windows
++++++++Administration
Database
++++++++Administration of Oracle
++++++++Administration of Mysql
Security
++++++++Network
+++++++++++++++++Online\
++++++++Security
Productivity
++++++++Google Search\
++++++++Tips
++++++++"Web Based Time Tracking,
++++++++Web Based Todo list and
++++++++Reduce Key Stores etc"
  1. Séparez tous les espaces de début et autres caractères d'une ligne par un caractère de saut de ligne.
  2. Remplacez maintenant l'espace et le retour à la ligne par un retour à la ligne et +. Ainsi, de droite à gauche, l'espace sera remplacé par + et la nouvelle ligne sera déplacée vers la gauche d'un caractère.
  3. Enfin au début de la ligne \n sera là, alors supprimez cette nouvelle ligne.

Linux
  1. Tutoriel de commande cd Linux pour les débutants (8 exemples)

  2. Tutoriel de commande Linux comm pour les débutants (5 exemples)

  3. Tutoriel de commande Linux df pour les débutants (8 exemples)

  4. Tutoriel de commande de date Linux pour les débutants (8 exemples)

  5. Tutoriel Linux du Command pour débutants (10 exemples)

Tutoriel de commande Linux w pour débutants (5 exemples)

Tutoriel de commande Linux ss pour les débutants (8 exemples)

Tutoriel Regex pour les exemples Linux (Sed &AWK)

Tutoriel Unix Sed :Exemples avancés de substitution Sed

Tutoriel Unix Sed :7 exemples d'opérations Sed Hold et Pattern Buffer

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