测试数据:
<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=\"\" />
答案 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.
插入文件名。