¿Cómo escapar de la ruta del archivo en SED?


40

Me gustaría sustituir $fileWithPathen $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:


72
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 "/".


1
Tenga en cuenta que si $fileWithPathcontiene espacios en blanco, se inserta el patrón incorrecto.
Lekensteyn

¡Su consejo adicional sobre cambiar el delimitador para rutas de archivos fue un salvavidas!
Shadoninja

Creo que tienes demasiadas citas en tu comando. Mi ejemplo sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnparece funcionar.
Léo Léopold Hertz 준영

15

Una mejor manera de cadenas literales con barras diagonales:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt

¡Este merecía un Oscar! Simple y elegante
Toan Nguyen

15

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'.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.