2

I have to modify a document containing xml data; one modification I couldn't set up with sed.

I have to modify the following expressions from:

<Bild href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg" 
href="file:///user/folder/Desktop/Bildschirmfoto%202012-06-18%20um%2013.17.45.png"></Bild>

to:

<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>

My problem: I couldn't duplicate the Bildschirmfoto%202012-06_fmt.jpeg to generate the correct new entry. The HTML tag is somewhere in the line, therefore I can't duplicate the whole line...

How can I do this with sed or other Linux commands?

2
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>@'

We need to extract image name which is inside href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg" . therefore first of all we'll write pattern for this :

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

where .* matches anything before href_fmt="
href_fmt=" matches href_fmt=" =) [^/]*/ matches dir name Bilder/ \([^"]*\) matches our image name. \(\) is used to make group and use it as \1 in the future ".* matches the rest of the line and now we will replace everything in the line accordinog to next expression:

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

where \1 equals to image name as mentioned above.

Hope now it is clear how does it work.

  • This looks like a working solution. Could you expand your answer to showcase it a bit more clearly? – ephsmith Jun 28 '12 at 13:05
  • Added some explanation. – rush Jun 28 '12 at 13:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.