2013-01-10 8 views
4

J'essaye de faire la recherche et le remplacement suivants, mais pour une raison quelconque cela ne fonctionne pas. Je suis en train de remplacer:Rechercher et remplacer Linux

require_once('

avec

require_once($_SERVER['DOCUMENT_ROOT']/'

Ce sont les exactes Srings (barre oblique et guillemets simples inclus).

C'est ce que je tentais, mais je ne peux pas le faire fonctionner:

find ./ -type f -readable -writable -exec sed -i "s/require_once(\'/require_once($_SERVER['DOCUMENT_ROOT'] . \'\//g" {} \; 

Qu'est-ce que je fais mal ??

+0

Un message d'erreur s'affiche-t-il? Je pense que le problème est avec l'échappement des caractères spéciaux. – alexraasch

Répondre

5

Vous devez échapper aux $ et / personnages:

sed "s/require_once('/require_once(\$_SERVER['DOCUMENT_ROOT']\/'/g" 
+0

On peut utiliser '@' comme délimiteur pour sed, donc vous n'avez pas besoin d'échapper '/'. par exemple: sed -e 's @/asd/@ b @'. Mais vous devrez toujours échapper '$'. – dwalter

+0

Génial a fonctionné parfaitement, merci! – Zak

0

Vous avez besoin backslasher-échapper le signe dollar entre guillemets, sinon la coquille interpole la (inexistante) variable d'environnement _SERVER, le remplacer par un chaîne vide.