Мне нужно изменить документ, содержащий 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
эквивалентно названию изображения, как указано выше.
Надеюсь, теперь понятно, как это работает.