shell html标记删除重复项

shell html标记删除重复项,shell,awk,sed,Shell,Awk,Sed,我需要清除HTML中不必要的斜体标记,无论如何:) 这是我的代码: text <i>text</i> <i>text text</i> text text <i>text</i><i> text text</i> text text<i>text </i>text text<i>text text</i> text text <i>text&

我需要清除HTML中不必要的斜体标记,无论如何:)

这是我的代码:

text <i>text</i> <i>text text</i> text
text <i>text</i><i> text text</i> text
text<i>text </i>text text<i>text text</i> text
text <i>text</i><i></i> text text<i>text text</i> text
文本
文本文本文本文本文本
文本文本文本文本文本文本文本
文本文本文本文本文本文本文本
以下是我预期的结果:

text <i>text text text</i> text
text <i>text text text</i> text
text<i>text </i>text text<i>text text</i> text
text <i>text</i> text text<i>text text</i> text
文本
文本文本文本文本文本
文本文本文本文本文本文本文本
文本文本文本文本文本文本文本
空格和正斜杠字符用反斜杠转义,每次替换结束时的g允许它在每行上多次匹配

(3) 标记内的空白应与捕获制表符和空格的
\s
匹配。奇怪的是,在最后一个
之前允许有足够多的空格,但在标记的其他地方不允许。但是,如果一个标记跨越多行,则会导致错误。在sed中匹配多行是可能的,但会将其变成一个脚本,该脚本对于一行来说太长

修改所有三种情况后,脚本行变为:

sed -i 's:</[Ii]\s*>\(\ \)\?\s*<[Ii]\s*>:\1:g' yourfile.html

有关这方面的更多信息,请参见SO问题。

到目前为止,您尝试了什么?请尽快阅读该页面,并访问描述和的链接。对不起,我试图涵盖所有可能的情况。您的解决方案并不像要求的那样不区分大小写(/I),我认为只需一个替换即可:
sed-r的:()?[]*:\1:gI'
此外,op没有提到这一点,但HTML标记可以包含空格(甚至换行符)而且仍然有效,如果这是一个要求,这会使事情变得更复杂。@ErikLievaart感谢你的洞察力;使用可选组巧妙地解决了问题。太棒了!!,非常感谢您的帮助,对我来说非常有用:)
's:</i>\(\ \)\?\s*<i>:\1:g'
sed -i 's:</[Ii]\s*>\(\ \)\?\s*<[Ii]\s*>:\1:g' yourfile.html
sed 'the same command' > newfile.html
mv newfile.html yourfile.html