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
f = file (fichier), d = directory (dossier)
-name “*.txt”
“*.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
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