我有一些HTML文本,我需要将其固定在URL文本上。我需要:
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>
我有许多文件,并且想要进行文件内替换。在/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
脚本来执行所有的取代:
sed '/<div class="classname"><a href="\/.*">/ { h; s/<div class="classname"><a href="\///; s/\(.*\)/\L\1/; s/ /-/g; s/[()]//g; x; s/\(<div class="classname"><a href="\/\)\(.*\)/\1/; G; s/\n//}'
/<div class="classname"><a href="\/.*">/
仅在模式匹配时执行命令。h
将行的副本存储在保留空间中。s/<div class="classname"><a href="\///
删除网址以外的所有内容。s/\(.*\)/\L\1/
将网址转换为小写。s/ /-/g
将空格转换为连字符。s[()]//g
删除括号。x
将保留空间与模式空间交换(现在再次在原始行上运行)s/\(<div class="classname"><a href="\/\)\(.*)/\1/
删除网址。G
将保留空间附加到模式空间s/\n//
删除G
命令引入的换行符。如果您的数据始终与示例中的数据完全相同(即<div class="classname"><a href="/URL">
),并且您不需要通用解决方案,则可以使用以下更简单的脚本:
sed '/<div class="classname"><a href="\/.*">/ { s/\(.*\)/\L\1/; s/ /-/3g; s/[()]//g }'
这将匹配模式,将所有内容都转换为小写,删除所有括号,并用连字符从第三个空格到行尾替换空格。
为了响应更新的问题,这是一条新sed
命令,该命令<img>
最后考虑了附加标签。
sed '/<div class="classname"><a href="\/[A-Z -(){}&]*"><img.*<\/div>/ { # match pattern
h; # hold copy of original string
# replace original string with just url, converted to lowercase.
s/\(<div class="classname"><a href="\/\)\([A-Z -(){}&]*\)\("><img.*<\/div>\)/\L\2/;
s/[ &]/-/g; # convert spaces, ampersands to hypens.
s/[(){}]//g; # remove parentheses, braces.
G; # append original string after url. Looks like: "converted-url\n<div class="classname"..."
s/\n//; # remove newline introduced by append G.
# swap out URL in original string with converted url.
s/\([a-z-]*\)\(<div class="classname"><a href="\/\)\([A-Z -(){}&]*\)\("><img.*<\/div>\)/\2\1\4/;
}'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句