Дублировать выбранные слова с помощью sed и заменить их

Дублировать выбранные слова с помощью sed и заменить их

Мне нужно изменить документ, содержащий XML-данные; одно изменение я не смог настроить с помощью sed.

Мне нужно изменить следующие выражения:

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

Моя проблема: Я не смог продублировать, Bildschirmfoto%202012-06_fmt.jpegчтобы сгенерировать правильную новую запись. Тег HTML находится где-то в строке, поэтому я не могу продублировать всю строку...

Как это сделать с помощью sedдругих команд Linux?

решение1

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

Нам нужно извлечь имя изображения, которое находится внутри href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg". Поэтому для начала напишем шаблон для этого:

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

где .*соответствует всему, что было до href_fmt="
href_fmt="соответствует href_fmt="=) [^/]*/соответствует имя каталога Bilder/ \([^"]*\)соответствует имени нашего изображения. \(\)используется для создания группы и использования ее \1в будущем ".*соответствует остальной части строки и теперь мы заменим все в строке в соответствии со следующим выражением:

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

где \1эквивалентно названию изображения, как указано выше.

Надеюсь, теперь понятно, как это работает.

Связанный контент