GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel Unix Sed :Rechercher et remplacer du texte dans un fichier à l'aide de RegEx

Cet article fait partie de la série de tutoriels Unix Sed en cours. Dans les articles précédents, nous avons discuté de l'opération d'impression sed et de l'opération de suppression sed.

Dans cet article, voyons comment utiliser la commande de substitution sed "s".

La commande `s' est probablement la plus importante de `sed' et a beaucoup d'options différentes.

La commande `s' tente de faire correspondre l'espace de modèle avec la REGEXP fournie ; si la correspondance est réussie, la partie de l'espace de motif qui correspondait est remplacée par REMPLACEMENT.

Syntax:

#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
  • s est une commande de remplacement
  • / est un délimiteur
  • REGEXP est l'expression régulière à faire correspondre
  • REPLACEMENT est une valeur à remplacer

FLAGS peut être l'un des éléments suivants

  • g Remplacez toutes les instances de REGEXP par REPLACEMENT
  • n Peut être n'importe quel nombre, remplacez la nième instance de REGEXP par REPLACEMENT.
  • p Si une substitution a été effectuée, imprime alors le nouvel espace de motif.
  • je fais correspondre REGEXP sans tenir compte de la casse.
  • w fichier Si une substitution a été effectuée, écrivez le résultat dans le fichier donné.
  • Nous pouvons utiliser différents délimiteurs ( l'un parmi @ %; :) au lieu de /

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

$ cat thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

Passons maintenant en revue quelques exemples intéressants de substitution.

1. Remplacez le mot "Linux" par "Linux-Unix" en utilisant sed s//

Dans l'exemple ci-dessous, dans la ligne de sortie "1. Linux-Unix Sysadmin, Linux Scripting, etc. » seulement d'abord Linux est remplacé par Linux-Unix. Si aucun indicateur n'est spécifié, la première correspondance de la ligne est remplacée.

$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

2. Remplacer toutes les apparences d'un mot à l'aide de sed s//g

La commande sed ci-dessous remplace toutes les occurrences de Linux par Linux-Unix en utilisant l'indicateur de substitution global "g".

$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

3. Remplacer uniquement la 2e occurrence d'un mot à l'aide de sed s//2

Dans l'exemple ci-dessous, dans la ligne de sortie "1. Administrateur système Linux, script Linux-Unix, etc. seule la 2ème occurrence de Linux est remplacée par Linux-Unix.

$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

4. Écrire les modifications dans un fichier et imprimer les modifications à l'aide de sed s//gpw

L'exemple ci-dessous a une substitution avec trois drapeaux. Il substitue toutes les occurrences de Linux à Linux-Unix et imprime la sortie substituée et l'écrit dans le fichier donné.

$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix
$ cat output
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix

5. Remplacer uniquement lorsque la ligne correspond au motif à l'aide de sed

Dans cet exemple, si la ligne correspond au motif "-", alors elle remplace tous les caractères de "-" par le vide.

$ sed '/\-/s/\-.*//g' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows

6. Supprimer le dernier X nombre de caractères de chaque ligne à l'aide de sed

Cet exemple sed supprime les 3 derniers caractères de chaque ligne.

$ sed 's/...$//' thegeekstuff.txt
# Instruction Gui
1. Linux Sysadmin, Linux Scripting e
2. Databases - Oracle, mySQL e
3. Security (Firewall, Network, Online Security e
4. Storage in Li
5. Productivity (Too many technologies to explore, not much time availab
#  Additional F
6. Windows- Sysadmin, reboot e

7. Éliminer les commentaires à l'aide de sed

Supprimez toutes les lignes de commentaire d'un fichier comme indiqué ci-dessous à l'aide de la commande sed.

$  sed -e 's/#.*//' thegeekstuff.txt

1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)

6. Windows- Sysadmin, reboot etc.

8. Éliminer les commentaires et les lignes vides à l'aide de sed

Dans cet exemple, il y a deux commandes séparées par ';'

  • La première commande remplace les lignes commençant par le # par les lignes vides
  • La deuxième commande supprime les lignes vides.
$ sed -e 's/#.*//;/^$/d'  thegeekstuff.txt
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
6. Windows- Sysadmin, reboot etc.

9. Convertir les retours à la ligne DOS (CR/LF) au format Unix à l'aide de sed

Copiez le fichier DOS sous Unix, vous pourriez trouver \r\n à la fin de chaque ligne.

Cet exemple convertit le format de fichier DOS au format de fichier Unix à l'aide de la commande sed.

$sed 's/.$//' filename

10. Éliminer les balises HTML du fichier à l'aide de sed

Dans cet exemple, l'expression régulière donnée dans la commande sed correspond aux balises html et les remplace par le vide.

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.

Linux
  1. Utilisation de sed pour rechercher et remplacer des fichiers texte sous Linux

  2. Remplacer une ligne par un autre contenu en utilisant Sed et Parallel pour un gros fichier ?

  3. Comment trouver les fins de ligne dans un fichier texte ?

  4. Utiliser grep et sed pour rechercher et remplacer une chaîne

  5. Utilisation de sed pour remplacer entre un modèle spécifique

Comment rechercher et remplacer du texte dans Vim

Tutoriel Unix Sed :Impression de lignes de fichier à l'aide d'adresses et de modèles

Tutoriel Unix Sed :Supprimer des lignes de fichier à l'aide d'adresses et de modèles

Tutoriel Unix Sed :comment écrire dans un fichier à l'aide de Sed

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

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier