850 votes

Awk/Sed : Comment faire un rechercher/remplacer récursif d’une chaîne ?

Comment pour trouver et remplacer toutes les occurrences de :

avec

dans chaque fichier texte sous la `` arborescence de répertoires (récursif Rechercher/Remplacer).

959voto

Nikita Fedyashev Points 4160
cd /home/www

find . -type f -print0 | xargs -0 sed -i 's/subdomainA.example.com/subdomainB.example.com/g'

UPD.

-print0 (GNU trouver uniquement) indique à trouver pour utiliser le caractère nul (\0) au lieu des espaces comme la sortie de séparateur entre les chemins trouvés. C'est une option plus sûre si vous les fichiers peuvent contenir d'espaces ou de caractères spéciaux. Il est recommandé d'utiliser l'-print0 argument à trouver si vous utilisez -exec commande ou xargs (-0 argument est nécessaire dans xargs.).

301voto

John Zwinck Points 43636
<pre><code></code><p>Par rapport aux autres réponses ici, c’est plus simple que la plupart et utilise sed au lieu de perl, qui est ce qui a demandé à la question initiale pour.</p></pre>

95voto

I159 Points 1951

Toutes les astuces sont presque les mêmes, mais j'aime celui-ci:

find <mydir> -type f -exec sed -i 's/<string1>/<string2>/g' {} +
  • find <mydir>: rechercher dans le répertoire.

  • -type f:

    Fichier est de type: fichier régulier

  • -exec command {} +:

    Cette variante de l'-exec action exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est construit en ajoutant chaque nom de fichier sélectionné à la fin; le nombre total d'appels de la commande sera beaucoup moins que le nombre de fichiers correspondants. La ligne de commande est construit de la même manière que xargs construit ses lignes de commande. Une seule instance de `{}' est permis dans la commande. La commande est exécutée dans le répertoire de démarrage.

49voto

Robert Lujo Points 2743

Pour moi la solution la plus simple à retenir est http://stackoverflow.com/a/2113224/565525, c'est-à-dire :

Remarque: résout le problème d’OSX

Remarque: si il y a trop de fichiers processus vous obtiendrez . La solution de contournement - utilisation ou `` solution décrite ci-dessus.

39voto

Employed Russian Points 50479
cd /home/www && find . -type f -print0 |
  xargs -0 perl -i.bak -pe 's/subdomainA\.example\.com/subdomainB.example.com/g'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X