使用 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等於上面提到的圖像名稱。

希望現在清楚它是如何運作的。

相關內容