我有一个如下标签:
<div style="position:absolute;opacity:0.5" class="header">Home</div>
(可能有也可能没有样式或其他属性)并且使用sed我需要将其转换为span的id是div的类的范围:
<span style="position:absolute;opacity:0.5" id="header">Home</span>
我知道如何在PHP中执行此操作但不幸的是我的Linux缺乏:) 找到符合条件的DIV的正则表达式是:
#<div .* id=(.*)>.*</div>#
但我不知道如何编写替换部分,主要是因为我需要保留div标签名称和id之间的内容。现在是凌晨4点45分,这也可能与它有关:p。
我很感激您的帮助,谢谢。
答案 0 :(得分:2)
使用sed,如果您想要更具体的处理:
sed '/<div/{s/<div /<span /;s/ class *=/ id =/;s!</div!</span!}' input
但是,假设start和close标签位于同一行,并且该行上有一个div标签。此外,它假定class属性是该行上唯一的属性。
更严格的命令是:
sed 's!<div\([^>]*\) class *= *\([^>]*\)>\([^<]*\)</div>!<span\1 id=\2>\3</span>!g' input
答案 1 :(得分:0)
sed 's/div/span/;s/id/class/' foo.html
将输出
<span style="position:absolute;opacity:0.5" class="header">Home</div>
foo.html
是您的文件
这将仅取代div
和id
的第一次出现。如果要替换all,则必须在每个替换模式的末尾添加“g”char,例如s/div/span/g
而且,同样重要的是,如果你想覆盖你的文件(所以如果你想要“替换”),你必须按照以下方式进行处理sed -ie 's/div/span/;s/id/class/' foo.html
最后一件事:正如Basile Starynkevitch在评论中所说,也许sed不是最佳选择