Tenho que modificar um documento que contém dados xml; uma modificação que não consegui configurar sed
.
Eu tenho que modificar as seguintes expressões 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>
para:
<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>
Meu problema: não consegui duplicar Bildschirmfoto%202012-06_fmt.jpeg
para gerar a nova entrada correta. A tag HTML está em algum lugar da linha, portanto não consigo duplicar a linha inteira...
Como posso fazer isso com sed
ou com outros comandos do Linux?
Responder1
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>@'
Precisamos extrair o nome da imagem que está dentro href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg"
. portanto, antes de tudo, escreveremos um padrão para isso:
.*href_fmt="[^/]*/\([^"]*\)".*
onde .*
corresponde a qualquer coisa antes de href_fmt="
href_fmt="
corresponde href_fmt="
=)
[^/]*/
corresponde ao nome do diretório Bilder/
\([^"]*\)
corresponde ao nome da nossa imagem. \(\)
é usado para fazer o grupo e usá-lo como \1
no futuro
".*
corresponde ao resto da linha e agora substituiremos tudo na linha de acordo com a próxima expressão:
<a href="http://test.server.at/media/somefolder/\1target="_blank"><img src="http://test.server.at/media/somefolder/\1" alt="" width="350" height="" /></a>
onde \1
é igual ao nome da imagem conforme mencionado acima.
Espero que agora esteja claro como isso funciona.