Duplicar palavras selecionadas com sed e substituí-lo

2

Eu tenho que modificar um documento contendo dados xml; uma modificação que não consegui configurar com 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 o Bildschirmfoto%202012-06_fmt.jpeg para gerar a nova entrada correta. A tag HTML está em algum lugar na linha, portanto não posso duplicar toda a linha ...

Como posso fazer isso com sed ou outros comandos do Linux?

    
por Roland 28.06.2012 / 11:13

1 resposta

2

sed 's@.*href_fmt="[^/]*/\([^"]*\)".*@<a href="http://test.server.at/media/somefolder/target="_blank"><img src="http://test.server.at/media/somefolder/"alt="" width="350" height="" /></a>@'

Precisamos extrair o nome da imagem que está dentro de href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg" . portanto, primeiro vamos escrever um padrão para isso:

.*href_fmt="[^/]*/\([^"]*\)".*

em que .* corresponde a qualquer coisa antes de href_fmt=" em href_fmt=" corresponde a href_fmt=" =) [^/]*/ corresponde ao nome do diretório Bilder/ \([^"]*\) corresponde ao nome da nossa imagem. \(\) é usado para fazer um grupo e usá-lo como no futuro ".* corresponde ao resto da linha e agora vamos substituir tudo na linha de acordo com a próxima expressão:

<a href="http://test.server.at/media/somefolder/target="_blank"><img src="http://test.server.at/media/somefolder/"alt="" width="350" height="" /></a>

em que é igual ao nome da imagem, como mencionado acima.

Espero que agora esteja claro como isso funciona.

    
por 28.06.2012 / 11:40