Duplique as palavras selecionadas por sed e substitua-as

Duplique as palavras selecionadas por sed e substitua-as

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.jpegpara 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 sedou 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 \1no 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.

informação relacionada