
Rechercher et remplacer du texte dans un fichier à l'aide de la commande sed
La procédure pour changer le texte dans les fichiers sous Linux/Unix en utilisant sed :
- Utilisez Stream EDitor (sed) comme suit :
- sed -i s/old-text/new-text/g input.txt
- Le site s est la commande de substitution de sed pour rechercher et remplacer
- Il demande à sed de trouver toutes les occurrences de 'old-text' et de les remplacer par 'new-text' dans un fichier nommé input.txt.
- Vérifier que le fichier a été mis à jour :
- plus input.txt
Voyons la syntaxe et l'utilisation en détail.
| Niveau de difficulté | Facile | 
| Privilèges de la racine | Non | 
| Exigences | Terminal Linux ou Unix | 
| Catégorie | Scripting shell Linux | 
| Conditions préalables | Utilitaire sed | 
| Compatibilité avec les systèmes d'exploitation | BSD-Linux-macOS-Unix-WSL | 
| Temps de lecture estimé | 4 minutes | 
Syntaxe : sed trouver et remplacer du texte
La syntaxe est la suivante :
$ sed s/word1/word2/g input.file
## *BSD/macOS sed syntax ##
$ sed s/word1/word2/g input.file >$ sed s/word1/word2/g input.file > output.file
## GNU/Linux sed syntax ##
$ sed -i s/word1/word2/g input.file
$ sed -i -e s/word1/word2/g -e s/xx/yy/g input.file
## Use + separator instead of / ## 
$ sed -i s+regex+new-text+g file.txtCe qui précède remplace toutes les occurrences des caractères du mot 1 dans l'espace des motifs par les caractères correspondants du mot 2.
Exemples qui utilisent sed pour rechercher et remplacer
Créons un fichier texte appelé hello.txt comme suit :
$ cat hello.txtUn exemple de fichier :
The is a test file created by nixCrft for demo purpose. foo is good. Foo is nice. I love FOO.
Je vais utiliser s/  pour remplacer l'expression trouvée foo par bar comme suit :
$ sed s/foo/bar/g hello.txtExemples de résultats :
The is a test file created by nixCrft for demo purpose. bar is good. Foo is nice. I love FOO.

  Pour mettre à jour le fichier, passez la commande -i  lorsque vous utilisez la version GNU/sed :
$ sed -i s/foo/bar/g hello.txt
$ cat hello.txtLe site g/ signifie remplacement global, c'est-à-dire trouver toutes les occurrences de foo et les remplacer par bar en utilisant sed. Si vous supprimez le /g, seule la première occurrence est modifiée. Par exemple :
$ sed -i s/foo/bar/ hello.txtLe site / agissent comme des caractères de délimitation. Pour correspondre à tous les cas de foo (foo, FOO, Foo, FoO), ajoutez l'option I (I majuscule) comme suit :
$ sed -i s/foo/bar/gI hello.txt
$ cat hello.txtExemples de résultats :
The is a test file created by nixCrft for demo purpose. bar is good. bar is nice. I love bar.
Une note sur la version sed de *BSD et macOS
Veuillez noter que l'implémentation BSD de sed (FreeBSD/OpenBSD/NetBSD/MacOS et co) ne supporte PAS la correspondance insensible à la casse, y compris les mises à jour de fichiers à l'aide de la fonction -i  option. Par conséquent, vous devez installer gnu sed. Exécutez la commande suivante sur Apple macOS (installez d'abord home brew sur macOS) :
$ brew install gnu-sed
$ gsed -i s/foo/bar/gI hello.txt
$ gsed -i.BAK s/foo/bar/gI hello.txt
$ cat hello.txtProblèmes liés à la commande sed
Considérons le fichier texte suivant :
$ cat input.txt
Trouvez le mot "http://" et remplacez-le par "https://www.hebergementwebgratuit.com" :
$ sed s/http:///https://www.hebergementwebgratuit.com/g input.txtVous obtiendrez une erreur qui se lit comme suit :
sed: 1: "s/http:///https://www.c ...": bad flag in substitute command: '/'
Notre syntaxe est correcte mais le caractère de délimitation / fait également partie du mot1 et du mot2 dans l'exemple ci-dessus. La commande Sed vous permet de changer le délimiteur / en quelque chose d'autre. Je vais donc utiliser :
$ sed s+http://+https://www.hebergementwebgratuit.com+g input.txtExemples de résultats :
https://www.cyberciti.biz is outdate. Consider using https:// for all your needs.
Comment utiliser sed pour faire correspondre des mots et effectuer des recherches et des remplacements ?
Dans cet exemple, ne trouvez que le mot "love" et remplacez-le par "sick" si la ligne contient une chaîne spécifique telle que FOO :
$ sed -i -e /FOO/s/love/sick/ input.txtUtilisez la commande cat pour vérifier les nouveaux changements :
$ cat input.txtRécapitulation et conclusion - Utilisation de sed pour trouver et remplacer du texte dans des fichiers donnés
La syntaxe générale est la suivante :
  ## find word1 and replace with word2 using sed ##
$ sed -i s/word1/word2/g input
## you can change the delimiter to keep syntax simple ##
$ sed -i s+word1+word2+g input
$ sed -i s_word1_word2_g input
## you can add I option to GNU sed to case insensitive search ##
$ sed -i s/word1/word2/gI input
$ sed -i s_word1_word2_gI inputVoir BSD (utilisé aussi sur macOS)  sed ou GNU  La page de manuel de sed en tapant la commande man/info ou la commande help suivante :
$ man sed
# gnu sed options #
$ sed --help
$ info sed