【发布时间】:2014-07-24 11:26:50
【问题描述】:
我有一些需要修复 URL 文本的 html 文本。我需要:
1) 将 URL 中的文本转换为小写 还 2) 将 URL 中的任何空格转换为连字符 还 3) 从 URL 中删除任何括号
我在每个文件中多次出现这种模式:
<div class="classname"><a href="/URL"><img src="${asset.image/url}" alt="TEXT" class="another-class-name" ></a></div>
示例:
我想改变这个模式:<div class="classname"><a href="/URL-EXAMPLE-ONE"><img src="${asset.image/url}" alt="TEXT" class="another-class-name" ></a></div>
收件人:<div class="classname"><a href="/url-example-one)"><img src="${asset.image/url}" alt="TEXT" class="another-class-name" ></a></div>
我有许多文件,并且想要进行 infile 替换。 /URL-EXAMPLE-ONE 可以是空格、括号的任意组合。
根据之前的建议,我正在使用以下 SED 脚本:
/sw/bin/sed -e '/<div class="mk-man-logo-mod5-m"><a href="\/[A-Z -{}&]*"></ {
h;
s/.*<div class="mk-man-logo-mod5-m"><a href="\/\(.*\)"><img.*/\1/;
s/\(.*\)/\L\1/;
s/[ &]/-/g;
s/[()]//g;
s/<img.*//;
x;
s/\(.*<div class="mk-man-logo-mod5-m"><a href="\/\)\(.*\)\(<img.*\)/\1\3/;
G;
s/\n//;
}' $e
但我得到的输出是,例如:
原文:
<div class="classname"><a href="/ABC (D&E)"><img src="${asset.images/common/manufacturer_logos/medium/abb-m.gif}" alt="TEXT" class="another-classname" ></a></div>
转换后的文字:
<div class="classname"><a href="/<img src="${asset.images/url}" alt="TEXT" class="another-classname" abc-d-ediv>
其实想要:
<div class="classname"><a href="/abc-d-e"><img src="${asset.images/url}" alt="TEXT" class="another-classname"></a></div>
谁能提供进一步的帮助?我已经为此花费了很多时间;我不是 SED 专家,但我认为我离这里很近,但缺少一些东西。
提前非常感谢, 亚历克斯
【问题讨论】:
-
您现在几乎是 sed 专家了。我可以看到您的
ABC (D&E)正在消失并且没有被替换。那一定令人失望。暂时关闭所有其他东西并专注于它。此外,虽然与其他sed案例相比是一件小事,但对于在搜索目标中需要转义/字符的行,为什么不为 s/t/r/ 使用另一个字符,例如#(所以s#t#r#) 来消除一个常见的错误来源。 (那么你不需要写s/.*...\/.../r/,但可以使用s#.*../..#r#。)。祝你好运。
标签: text replace sed string-substitution