Me gustaría sustituir $fileWithPath
en $file
, sin embargo, esto no funciona porque (creo) camino no se escapó. ¿Cómo escapar de eso?
sed -i 's/${fileWithPath}/HAHA/g' $file
Me gustaría sustituir $fileWithPath
en $file
, sin embargo, esto no funciona porque (creo) camino no se escapó. ¿Cómo escapar de eso?
sed -i 's/${fileWithPath}/HAHA/g' $file
Respuestas:
sed -i 's|'$fileWithPath'|HAHA|g' file
Las comillas simples definen un literal de cadena. Poner la variable fuera del literal permite que el shell expanda esa parte.
Además: si va a analizar rutas, use un delimitador en el comando sed que no confunda con el delimitador de directorio "/".
sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
parece funcionar.
Una mejor manera de cadenas literales con barras diagonales:
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
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 tubería | o el hash # : la mejor opción para delimitar caracteres a menudo dependerá del tipo de archivo que se procese. En tu caso puedes probar
sed -i 's#'$fileWithPath'#HAHA#g' $file
El carácter 'g' después del último # se usa para cambiar todas las ocurrencias en el archivo si necesita cambiar solo la primera aparición y luego eliminar la 'g'.
$fileWithPath
contiene espacios en blanco, se inserta el patrón incorrecto.