Tengo que modificar un documento que contiene datos xml; una modificación con la que no pude configurar sed
.
Tengo que modificar las siguientes expresiones de:
<Bild href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg"
href="file:///user/folder/Desktop/Bildschirmfoto%202012-06-18%20um%2013.17.45.png"></Bild>
a:
<a href="http://test.server.at/media/somefolder/Bildschirmfoto%202012-06_fmt.jpeg"
target="_blank"><img src="http://test.server.at/media/somefolder/Bildschirmfoto%202012-06_fmt.jpeg"
alt="" width="350" height="" /></a>
Mi problema: no pude duplicar Bildschirmfoto%202012-06_fmt.jpeg
para generar la nueva entrada correcta. La etiqueta HTML está en algún lugar de la línea, por lo tanto no puedo duplicar toda la línea...
¿Cómo puedo hacer esto con sed
otros comandos de Linux?
Respuesta1
sed 's@.*href_fmt="[^/]*/\([^"]*\)".*@<a href="http://test.server.at/media/somefolder/\1target="_blank"><img src="http://test.server.at/media/somefolder/\1" alt="" width="350" height="" /></a>@'
Necesitamos extraer el nombre de la imagen que está dentro href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg"
. por lo tanto, antes que nada escribiremos un patrón para esto:
.*href_fmt="[^/]*/\([^"]*\)".*
donde .*
coincide con cualquier cosa antes de href_fmt="
href_fmt="
coincide href_fmt="
=)
[^/]*/
coincide con el nombre del directorio Bilder/
\([^"]*\)
coincide con el nombre de nuestra imagen. \(\)
se usa para hacer un grupo y usarlo como \1
en el futuro
".*
coincida con el resto de la línea y ahora reemplazaremos todo en la línea de acuerdo con la siguiente expresión:
<a href="http://test.server.at/media/somefolder/\1target="_blank"><img src="http://test.server.at/media/somefolder/\1" alt="" width="350" height="" /></a>
donde \1
es igual al nombre de la imagen como se mencionó anteriormente.
Espero que ahora quede claro cómo funciona.