GNU/Linux >> Tutoriels Linux >  >> Linux

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

Dans le cadre de notre série de tutoriels UNIX sed en cours, nous avons couvert l'impression, la suppression, la substitution, l'écriture de fichiers, commandes de manipulation de fichiers, etc., avec la seule ligne dans l'espace de modèle.

Dans cet article, examinons comment effectuer l'opération multiligne dans Sed.

Vous souvenez-vous de la méthodologie de travail Sed que nous avons apprise dans notre premier tutoriel sed ?. Dans cet article, nous avons expliqué que Sed lit ligne par ligne, supprime toutes les nouvelles lignes de fin, place une ligne dans un tampon d'espace de modèle, traite selon les commandes données et imprime l'espace de modèle.

Si vous souhaitez supprimer toutes les nouvelles lignes d'un fichier, vous ne pouvez pas utiliser la méthode suivante. Parce que la nouvelle ligne est déjà supprimée et placée dans l'espace du motif.

$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename

Pour des situations comme celle-ci, sed multi-ligne est approprié. Sed fournit la commande "N" pour les opérations multi-lignes.

La commande N lit une ligne suivante à partir de l'entrée, ajoute la ligne suivante à l'espace de modèle. La ligne suivante est séparée de l'espace du motif d'origine par un caractère de saut de ligne.

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

$ cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$

Remarque : Il y a deux lignes vierges consécutives dans l'entrée ci-dessus. ( 5ème et 6ème ligne ).

Exemple Sed 1. Joindre deux lignes consécutives

$ sed -e '{
N
s/\n/ @ /
}' thegeekstuff.txt

Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
 @
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.

Dans l'exemple ci-dessus,

  • Les accolades "{" et "}" utilisées pour regrouper les commandes. Les accolades et les commandes sed doivent être sur des lignes séparées.
  • Sed lit la première ligne et la place dans l'espace de modèle, la commande N lit la ligne suivante et ajoute avec l'espace de modèle, c'est-à-dire la première ligne séparée par une nouvelle ligne. Alors maintenant, l'espace de modèle aura la première ligne\nla deuxième ligne.
  • Prochaine substitution de \n à space@space et il imprime le contenu de l'espace de motif comme son comportement par défaut sed. Ainsi les lignes consécutives sont jointes et délimitées par « @ »

Sed Exemple 2. Numéroter chaque ligne non vide d'un fichier

Comme mentionné dans notre article précédent, =est une commande pour obtenir un numéro de ligne d'un fichier.

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
  • La première commande sed imprime le numéro de ligne et imprime la ligne d'origine dans une ligne suivante si ce n'est pas un blanc. (Exécutez-la et voyez la sortie de la première commande sed).
  • La prochaine commande sed ajoute simplement une paire de lignes.

Sed Exemple 3. Supprimer deux lignes vierges consécutives de l'entrée

$ sed '/^$/{
N
/^\n$/d
}' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.

Si la ligne est vide, lisez et ajoutez la ligne suivante, /^\n$/ représente, deux lignes sont vides,\n est ajouté par la commande N. Ensuite, supprimez simplement l'espace du motif et démarrez le cycle suivant à l'aide de la commande 'd'.

Sed Exemple 4. Supprimer les 2 dernières lignes d'un fichier

Avant de voir cet exemple, vous devez connaître deux commandes sed intéressantes.

  1. P – qui imprime la première ligne d'un espace de modèle. (jusqu'au premier \n).
  2. D - Supprimer la première ligne de l'espace du motif. Le contrôle passe alors en haut du script.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
  1. Lit la première ligne et la place dans l'espace du motif.
  2. La commande N lit la ligne suivante et l'ajoute à l'espace du modèle séparé par une nouvelle ligne. (Maintenant première ligne\ndeuxième ligne)
  3. S'il n'atteint pas la dernière ligne ($), imprimez la première ligne et supprimez la première ligne seule de l'espace du motif. Puis le cycle recommence.
  4. Comme ça, il rejoint les 2e\n3e lignes, 3e\n4e lignes et continue.
  5. Enfin, lorsqu'il a la 9e\n10e ligne dans un espace de modèle, il atteint $ donc il supprime simplement l'espace de modèle. ($!P et $!D ne seront pas imprimés et supprimés s'il s'agit de $).

Sed Exemple 5. Imprimer les 2 dernières lignes d'un fichier

$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

Ce qui précède joint et supprime chaque ligne jusqu'à ce que les deux dernières lignes soient présentes dans l'espace du motif. Lorsqu'il atteint $, imprime l'espace du motif qui n'aura que les deux dernières lignes.

Sed Exemple 6. Supprimer les lignes consécutives en double d'un fichier

La commande ci-dessous vérifie chaque ligne jointe à la ligne suivante, vérifie si les deux sont identiques, alors ce n'est pas l'espace de motif d'impression (! P), supprimez simplement la première ligne de l'espace de motif. Il ne restera donc qu'une seule ligne dans l'espace du motif.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.

Linux
  1. Tutoriel de commande Linux/UNIX Awk avec exemples

  2. 17 commandes Tar utiles avec des exemples pratiques sous Linux

  3. Commande Diff sous Linux avec exemples

  4. Tutoriel Awk :Comprendre les variables Awk avec 3 exemples pratiques

  5. Tutoriel sur l'état de sortie de Bash Shell avec des exemples pratiques

Tutoriel Unix Sed :Exemples avancés de substitution Sed

Tutoriel Unix Sed :ajouter, insérer, remplacer et compter les lignes de fichiers

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

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques

Le didacticiel Ultimate Tar Command avec 10 exemples pratiques

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques