bash - separador - sed escape/
código de comando inválido., a pesar de los períodos de escape, usando sed (3)
Estar obligado a usar CVS para un cliente actual y cambiar la dirección para el repositorio remoto. La única forma en que puedo encontrar para cambiar la dirección remota en mi código local es buscar y reemplazar recursivamente.
Sin embargo, con el comando sed espero trabajar:
find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} /;
Me sale un error por cada archivo:
sed: 1: ".//file/path ...": invalid command code .
Intenté escapar de los períodos en el emparejamiento / reemplazo sed pero eso no soluciona nada.
Probablemente su nuevo dominio contenga /
? Si es así, intente usar un separador que no sea /
in sed
, por ejemplo, #
,
etc.
find ./ -type f -exec sed -i ''s#192.168.20.1#new.domain.com#'' {} /;
También sería bueno incluir s///
en comillas simples en lugar de comillas dobles para evitar la sustitución de variables o cualquier otro comportamiento inesperado
Si está en un OS X, probablemente esto no tiene nada que ver con el comando sed. En la versión OSX de sed
, la opción -i
espera un argumento de extension
para que su comando se analice como el argumento de extension
y la ruta del archivo se interprete como el código de comando.
Intente agregar el argumento -e
explícitamente y dando ''''
como argumento a -i
:
find ./ -type f -exec sed -i '''' -e "s/192.168.20.1/new.domain.com/" {} /;
Mira this
Simplemente olvidaste proporcionar un argumento a -i
. Solo cambia -i
a -i ''''
.
Por supuesto, eso significa que no desea que sus archivos sean respaldados; de lo contrario, proporcione la extensión de su elección, como -i .bak
.