Afficher la pageLiens de retourExport to MarkdownExportation ODTHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Remplacer terxtes dans fichiers ====== ==== Question ==== 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 : ==== Réponse 1 ==== 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. ==== Réponse ==== 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 -type f : filtre pour ne chercher que les fichiers (pas les dossiers) f = file (fichier), d = directory (dossier) -name "*.txt" -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 -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:28de dpt