Estoy tratando de escribir el siguiente script bash:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
La línea que quiero cambiar en los archivos es esta:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Entonces el resultado final debe ser:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Pero no entiendo eso ... Supongo que se debe a los caracteres de escape ...
¿Alguien puede arrojar algo de luz?
Gracias
command-line
scripts
sed
Felipe Caldas
fuente
fuente
Respuestas:
En circunstancias en las que la cadena de reemplazo o la cadena de patrón contienen barras, puede utilizar el hecho de que GNU sed permite un delimitador alternativo para el comando sustituto. Las opciones comunes para el delimitador son el carácter de canalización
|
o el hash#
: la mejor opción para delimitar caracteres a menudo dependerá del tipo de archivo que se procese. En tu caso puedes probarTambién tenga en cuenta que escribió mal su nombre de variable $ HOME_DIR (no comienza con un guión bajo).
Solo para su información, es posible que desee evitar el uso de mayúsculas para las variables de usuario en su script; deben reservarse para las variables del sistema. Además, el
g
cambio no es necesario a menos que desee realizar reemplazos múltiples en una sola línea.fuente
La codificación de la variable 'opt / home' funcionará de esta manera ...
fuente