code de commande invalide., malgré les périodes d’échappement, en utilisant sed

Être obligé d’utiliser CVS pour un client actuel et l’adresse a changé pour le repo distant. La seule façon que je puisse trouver pour changer l’adresse distante dans mon code local est une recherche récursive et la remplacer.

Cependant, avec la commande sed, je m’attends à travailler:

find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;

Je reçois une erreur pour chaque fichier:

sed: 1: ".//file/path ...": invalid command code .

J’ai essayé d’échapper aux périodes dans le match / remplacement sed mais cela ne résout rien.

Si vous utilisez un OS X, cela n’a probablement rien à voir avec la commande sed. Sur la version OSX de sed , l’option -i attend un argument d’ extension afin que votre commande soit analysée en tant qu’argument d’ extension et que le chemin du fichier soit interprété comme le code de la commande.

Essayez d’append explicitement l’argument -e et de donner '' argument '' comme -i :

 find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \; 

Voir ça

Vous avez simplement oublié de fournir un argument à -i . Changez simplement -i en -i '' .

Bien sûr, cela signifie que vous ne voulez pas que vos fichiers soient sauvegardés; sinon, fournissez votre extension de choix, comme -i .bak .

Votre nouveau domaine contient probablement / ? Si oui, essayez d’utiliser un séparateur autre que / dans sed , par exemple # , etc.

 find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \; 

Il serait également judicieux de joindre s/// en guillemet simple plutôt que de guillemets doubles pour éviter la substitution de variables ou tout autre comportement inattendu