使用 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="[^/]*/\([^"]*\)".*

其中匹配matches.*之前的任何内容=) matches dir name与我们的图像名称匹配。 用于创建组并在将来 使用它来匹配该行的其余部分,现在我们将根据下一个表达式替换该行中的所有内容: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等于上面提到的图像名称。

希望现在清楚它是如何工作的。

相关内容