web-dev-qa-db-fra.com

Rechercher et remplacer par sed dans les répertoires et sous-répertoires

J'exécute cette commande pour rechercher et remplacer toutes les occurrences de 'Apple' par 'orange' dans tous les fichiers de la racine de mon site:

find ./ -exec sed -i 's/Apple/orange/g' {} \;

Mais cela 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
214
hd.

Votre recherche devrait ressembler à cela pour éviter d’envoyer des noms de répertoires à sed:

find ./ -type f -exec sed -i -e 's/Apple/orange/g' {} \;
369
jfg956

Pour les tâches plus importantes, il est préférable et plus rapide d’utiliser grep et xargs, par exemple;

grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'
73
Julius

Cela a fonctionné pour moi:

find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;
4
blackdad
grep -e Apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|Apple|orage|"
2
rocLv

Je pense que nous pouvons le faire avec une simple commande en ligne

for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done

Reportez-vous à ceci page .

0
Sukrant