2017-07-31 1 views
2

Je veux remplacer une chaîne par une autre mais je ne peux pas. Le code est:SH - Remplacer le texte

updatedb 
MCRYPTINI=$(locate mcrypt.ini | grep 'apache2') 
MCRYPTSO=$(locate mcrypt.so | grep "/mcrypt.so") 

OLD="extension=mcrypt.so" 
NEW="extension=$MCRYPTSO" 

echo $MCRYPTINI 
echo $MCRYPTSO 
echo $OLD 
echo $NEW 
echo "'s/$OLD/$NEW' $MCRYPTINI" 

sed -i 's/$OLD/$NEW' $MCRYPTINI 

Et le résultat est:

sudo sh testScript.sh 
/etc/php5/apache2/conf.d/20-mcrypt.ini 
/usr/lib/php5/20121212/mcrypt.so 
extension=mcrypt.so 
extension=/usr/lib/php5/20121212/mcrypt.so 
's/extension=mcrypt.so/extension=/usr/lib/php5/20121212/mcrypt.so' /etc/php5/apache2/conf.d/20-mcrypt.ini 
sed: -e expression #1, char 11: unterminated `s' command 

Pour la réponse que je ne ai pas besoin d'utiliser sed, mais il est semble facile et bon. J'utilise Sh pas bash parce que je veux que le code peut utiliser dans tous les systèmes, donc je préfère les réponses qui suivent ce principe

MISE À JOUR

sed -i "s/$OLD/$NEW/" $MCRYPTINI 

erreur:

sed: -e expression #1, char 14: unknown option to `s' 
+0

Avez-vous déjà essayé d'ajouter un '/' '$ après new' dans l'expression 'sed'? – Danibix

+0

Ok, cela a résolu le problème ... Mais la chaîne n'a pas changé – oootramas

+0

Copie possible de [Utiliser une variable dans une commande sed] (https://stackoverflow.com/questions/11146098/use-a-variable-in -a-sed-command) – Danibix

Répondre

0

La solution pourrait être:

sed -i "s/$OLD/$NEW/" $MCRYPTINI 

mais $NEW est un chemin, alors je dois changer "/" par un autre caractère, par exemple "+"

sed -i "s+$OLD+$NEW+" $MCRYPTINI 
1

Ajouter une barre oblique et des guillemets:

sed -i "s/$OLD/$NEW/" file 
+0

La dernière barre oblique est correcte, mais avec des guillemets doubles -> sed: -e expression # 1, char 34: option inconnue à 's ' – oootramas

+0

@oootramas: La dernière barre oblique était manquante dans votre extrait . Et les doubles quotes aussi à ajouter. – Guru