1

我有一个标签,如下所示:

<div style="position:absolute;opacity:0.5" class="header">Home</div>

(可能有也可能没有样式或其他属性)并且使用 sed 我需要将其转换为跨度,其中跨度的 id 是 div 的类:

<span style="position:absolute;opacity:0.5" id="header">Home</span>

我知道如何在 PHP 中做到这一点,但不幸的是我的 Linux 缺少:)。
查找符合条件的 DIV 的正则表达式如下:

#<div .* id=(.*)>.*</div>#

但是替换部分不知道怎么写,主要是需要保留div标签名和id之间的内容。现在是凌晨 4 点 45 分,所以这也可能与它有关:p。

我将不胜感激任何帮助,谢谢。

4

2 回答 2

2

使用 sed,如果您想要更具体的处理:

sed '/<div/{s/<div /<span /;s/ class *=/ id =/;s!</div!</span!}' input

仍然,这假设开始和结束标签在同一行,并且该行上有一个 div 标签。它还假设 class 属性是该行中唯一的一个。

更严格的命令是:

sed 's!<div\([^>]*\) class *= *\([^>]*\)>\([^<]*\)</div>!<span\1 id=\2>\3</span>!g' input
于 2012-12-28T09:54:25.110 回答
0
sed 's/div/span/;s/id/class/' foo.html

将输出

<span style="position:absolute;opacity:0.5" class="header">Home</div>

foo.html你的文件在哪里

注意

这将仅替换divand的第一个出现id。如果要全部替换,则必须在每个替换模式的末尾添加“g”字符,例如s/div/span/g

而且,同样重要的是,如果你想覆盖你的文档(所以如果你想“就地”替换出现),你必须按照以下方式进行sed -ie 's/div/span/;s/id/class/' foo.html

最后一件事:正如Basile Starynkevitch在评论中所说,也许 sed 不是最佳选择

于 2012-12-28T09:48:49.363 回答