J'exécute cette commande pour trouver et remplacer toutes les occurrences de 'apple' par 'orange' dans tous les fichiers à la racine de mon site:
find ./ -exec sed -i 's/apple/orange/g' {} \;
Mais il ne passe pas par les sous-répertoires.
Quel est le problème avec cette commande?
Voici quelques lignes de sortie de find ./
:
./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php
find ./
et publier un exemple de sortie? Et la structure du répertoire s'il vous plaît. modifier: merci!Réponses:
Votre recherche devrait ressembler à cela pour éviter d'envoyer des noms de répertoire à sed:
la source
sed -i 's/apple/orange/g'
poursed -i '' 's/apple/orange/g'
faire ce travail.-i
prend un argument: l'extension utilisée pour enregistrer le fichier temporaire. Dans GNU sed, il semble qu'il n'y ait pas d'espace entre-i
et son argument, mais dans BSD sed il y en a… donc BSD-i '' 's/foo/bar/'
est équivalent à GNU-i 's/foo/bar/
.-e
ne fonctionne pas sur Mac OS.touch a b c d e
suivi de la commande produit liste ci - dessus un répertoire comme celui - ci:a a-e b b-e c c-e d d-e e e-e
.RE error: illegal byte sequence
'{}'
, car le poisson étend automatiquement les accolades vides s'il n'est pas cité.Pour les tâches s & r plus importantes, il est préférable et plus rapide d'utiliser grep et xargs, par exemple;
la source
git grep -l 'apples' | xargs sed -i 's/apples/oranges/g'
Cela a fonctionné pour moi:
la source
*.php
est vraiment incorrect; vous avez juste eu de la chance qu'il n'ait pas été développé dans le répertoire de départ car il n'y avait aucun fichier correspondant.la source
Puisqu'il y a aussi des gens macOS qui lisent celui-ci (comme je l'ai fait), le code suivant a fonctionné pour moi (le 10.14)
Toutes les autres réponses utilisant
-i
et-e
ne fonctionnent pas sur macOS.La source
la source
Je pense que nous pouvons le faire avec une simple commande en ligne
Reportez-vous à cette page .
la source
Sous linuxOS:
si "sed" ne fonctionne pas, essayez:
la source