2014-04-23 50 views
2

測試數據:桑達反向引用不正常

<img src=\"images/docs/mydash_grooms.png\" alt=\"\" /> 

桑達:

sed 's/<img\ssrc=\\"images\/docs\/\([[:graph:]]\)/<a class=\\"popup-image\\" href=\\"images\/docs\/\1\\"><img src=\\"images\/docs\/tn.\1/g' test.txt 

輸出桑達:使用

<a class=\"popup-image\" href=\"images/docs/m\"><img src=\"images/docs/tn.mydash_grooms.png\" alt=\"\" /> 

爲什麼工作不正常我的反向引用兩次?

試圖完成: 發生變化:

<img src=\"images/docs/mydash_grooms.png\" alt=\"\" /> 

<a class=\"popup-image\" href=\"images/docs/mydash_grooms.png\"><img src=\"images/docs/tn.mydash_grooms.png\" alt=\"\" /> 
+0

你可以在sed中使用像'\ s'和'[[:graph:]]'的東西嗎? – ooga

+0

當然,我第二次打電話給我時,我的電話並不是第一次打電話。 – morissette

+0

我想是這樣。你的意思是隻捕捉一個字符? – ooga

回答

1

你必須逃離\所以他們實際上成了 「\\」。但是,您還必須轉義/,這會使字符串非常複雜。我建議將sed的分隔符(即'/')替換爲另一個字符以避免複雜的字符串。例如,使用@

sed '[email protected]<img src=\\"images/docs/\(.*\)\\" alt=\\"\\" />@<a class=\\"popup-image\\" href=\\"images/docs/\1\\"><img src=\\"images/docs/tn.\1\\" alt=\\"\\" />@g' test.txt 

Futhermore,請更換[:圖:],它不是爲我工作。

0

這可能爲你工作(GNU SED):

sed -r 'h;s|img src(.*) alt.*|a class=\\"popup-image\\" href\1>|;G;s/\n//;s|(.*/)([^>])|\1tn.\2|' file 

保存在貨艙空間中的直線,然後改變行復制的第一個屬性。追加原始行並將tn.插入文件名。