Sed反向引用不正常

时间:2014-04-23 23:25:56

标签: bash sed

测试数据:

<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 

Sed的输出:

<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=\"\" />

2 个答案:

答案 0 :(得分:1)

你必须逃避\它们实际上变成了#34; \\&#34;。但是,您还必须转义/,这使得字符串非常复杂。我建议将sed的分隔符(即&#39; /&#39;)替换为另一个字符以避免复杂的字符串。例如,使用@

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

另外,请替换[[:graph:]],它不适合我。

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

将该行保存在保留空间中,然后更改该行以复制第一个属性。附加原始行并将tn.插入文件名。