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
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 "/".
$fileWithPath
contiene espacios en blanco, se inserta el patrón incorrecto.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:
fuente
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
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'.
fuente