Tengo varios basados en Windows.m3ulistas de reproducción: comienzan con ..\..\
y tienen \
en lugar /
de rutas de carpeta, mientras que Ubuntu prefiere que comiencen con /media/usr/part/dir/
(es decir, la ruta absoluta).
quiero hacer los siguientes cambios
- Reemplace todo
..\..\
con/media/usr/part/dir/
- Reemplace todo
\
con/
Intenté usar find /home/user/directory -name \*.m3u -exec sed -i "s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g" {} \;
como se sugiereaquí, e intenté usar _
y :
como delimitadores como se sugiereaquí.
Sin embargo, sigo recibiendo
sed: -e expression #1, char 36: unterminated `s' command
¿Cómo hago los reemplazos necesarios en mis archivos?
Respuesta1
s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g
Este sed
comando es incorrecto, porque falta un elemento \
antes del primero /
, lo que lleva al anterior \
a escaparlo como un literal /
(cambiando el patrón y "comiéndose" el separador) y, con el propósito de reemplazar una única aparición de ..\..\
en cada línea, tiene un g
interruptor excesivo al final; en cualquier caso falta el reemplazo de los \
personajes con la /
parte del personaje.
Utilice este en su lugar; Me he tomado la libertad de cambiar el separador para deshacerme de una posible aparición repentina.síndrome del palillo inclinadoy cambiar ;
con +
para mejorar el rendimiento del comando en una gran cantidad de archivos:
find /home/user/directory -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
Producción:
~/tmp$ cat playlist1.m3u
..\..\path1
stuff
..\..\path2\path2
stuff
..\..\path3\path3\path3
stuff
~/tmp$ find . -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
~/tmp$ cat playlist1.m3u
/media/usr/part/dir/path1
stuff
/media/usr/part/dir/path2/path2
stuff
/media/usr/part/dir/path3/path3/path3
stuff