Remplacer terxtes dans fichiers

linux ligne de commande pour remplaer un mot par un autreModifierVoici plusieurs méthodes pour remplacer un mot par un autre en ligne de commande Linux :

Voici plusieurs méthodes pour remplacer un mot par un autre en ligne de commande Linux :
Avec sed (le plus courant)

Pour remplacer dans un fichier et afficher le résultat :
bash

sed 's/ancien_mot/nouveau_mot/g' fichier.txt

Pour modifier le fichier directement :
bash

sed -i 's/ancien_mot/nouveau_mot/g' fichier.txt

Pour remplacer seulement la première occurrence par ligne :
bash

sed 's/ancien_mot/nouveau_mot/' fichier.txt

Avec grep et sed combinés

Pour chercher et remplacer dans plusieurs fichiers :
bash

grep -l “ancien_mot” *.txt | xargs sed -i 's/ancien_mot/nouveau_mot/g'

Avec find pour une recherche récursive

Pour remplacer dans tous les fichiers d'un répertoire et ses sous-répertoires :
bash

find . -type f -name “*.txt” -exec sed -i 's/ancien_mot/nouveau_mot/g' {} +

Exemples pratiques

Remplacer “hello” par “bonjour” dans un fichier :
bash

sed -i 's/hello/bonjour/g' monfichier.txt

Remplacer avec des caractères spéciaux (utiliser un autre délimiteur) :

bash

sed -i 's|/ancien/chemin|/nouveau/chemin|g' fichier.txt

Faire une sauvegarde avant modification :
bash

sed -i.bak 's/ancien_mot/nouveau_mot/g' fichier.txt

L'option -i modifie le fichier directement, g remplace toutes les occurrences sur chaque ligne, et vous pouvez ajouter .bak pour créer une sauvegarde automatique.

find . -type f -name “*.txt” -exec sed -i 's/ancien_mot/nouveau_mot/g' {} + explication du code
Modifier

Voici l'explication détaillée de cette commande :
Décomposition de la commande
bash

find . -type f -name “*.txt” -exec sed -i 's/ancien_mot/nouveau_mot/g' {} +

find .

  find : commande pour rechercher des fichiers et dossiers
  . : commence la recherche dans le répertoire courant (point = répertoire actuel)

-type f

  1. type f : filtre pour ne chercher que les fichiers (pas les dossiers)

f = file (fichier), d = directory (dossier)

-name “*.txt”

  1. name : filtre par nom de fichier

“*.txt” : motif qui correspond à tous les fichiers se terminant par .txt

  L'astérisque * est un joker qui remplace n'importe quelle séquence de caractères

-exec

  1. exec : exécute une commande sur chaque fichier trouvé

Tout ce qui suit -exec jusqu'à {} ou + est la commande à exécuter

sed -i 's/ancien_mot/nouveau_mot/g'

  sed : éditeur de flux pour modifier du texte
  -i : modifie le fichier directement (in-place)
  's/ancien_mot/nouveau_mot/g' :
      s = substitution
      /ancien_mot/ = texte à chercher
      /nouveau_mot/ = texte de remplacement
      g = global (remplace toutes les occurrences sur chaque ligne)

{}

  {} : placeholder qui sera remplacé par le nom de chaque fichier trouvé
  find remplace {} par le chemin complet de chaque fichier

+

  + : termine la commande -exec et optimise l'exécution
  Groupe plusieurs fichiers ensemble pour une exécution plus efficace
  Alternative à \; qui exécuterait sed une fois par fichier

Exemple concret

Si vous avez cette structure :

./doc1.txt
./dossier/doc2.txt
./autre/doc3.txt

La commande va :

  Trouver tous les fichiers .txt
  Exécuter sed -i 's/ancien_mot/nouveau_mot/g' sur chacun
  Remplacer tous les "ancien_mot" par "nouveau_mot" dans chaque fichier

C'est l'équivalent d'exécuter :
bash

sed -i 's/ancien_mot/nouveau_mot/g' ./doc1.txt ./dossier/doc2.txt ./autre/doc3.txt

  • bricoler/prive/commandes
  • Dernière modification : 2025/08/18 13:28
  • de dpt