【发布时间】:2014-07-23 00:35:09
【问题描述】:
我有一些需要修复 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 可以是空格、括号的任意组合。
我现在有了,使用以下建议:
/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 命令中:
-e 's/ /-/g' -e 's/[()]//g'。第一个将空格更改为连字符;第二个删除括号。 -
@savanto:这将使输出中的
div-class="classname"而不是div class="classname"。 -
有
y///命令:y/ABCDEFGHIJKLMNOPRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/但它可能对您的目的过于热情。您可能必须使用保持空间和模式空间来玩有趣的游戏才能使其发挥作用。您可以检查/实验您的sed是否将\L或\U(和\E)识别为s///的替换部分中的转义符,以表示小写、大写(和“结束”)映射,但可能不会。 -
@anubhava 好点。您可以使用
-e 's/ /-/3g'仅替换第三个空格。 -
@savanto 您能否提供进一步帮助,请参阅我上面编辑过的问题。
标签: bash text replace sed substitution