variable separador literal for escape comando campos cadena buscar bash macos sed

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 .