使用带有sed的正则表达式删除html标记

时间:2015-10-19 22:44:51

标签: regex ubuntu sed substitution

说,

我有一个由soffice --headless命令生成的Word(DOCX)的html文件。然后我做了tidy命令,以便通过从Word中删除不必要的html / css化妆品来使html看起来干净。

我看到类似

的内容
<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

<p lang="en-US" class="western c31"></p>

... repeated 15 times

我做了这些命令: sed -e 's/<(.*?)><\/(.?)>//g' > ./hasil.html sed -e 's/<[a-z] lang="(.*) class="western (.*?)><\/[a-z]>//g' > ./hasil.html

从HTML文件中删除<p lang="en-US" class="western c31"></p>并没有按预期工作。

我尝试了linkthis link,但也没有帮助。

任何帮助都会受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

所有sed的正则表达式都在寻找(最左边)最长的匹配。对于非贪婪的正则表达式,Perl和其他人可能支持.*?形式,但是sed没有。

如果要删除这些行,请尝试:

sed '\|<p lang="en-US" class="western c31"></p>|d' hasil.html

d是sed的删除命令。

如果你想使用替换命令只删除那些标记,那么留下任何其他内容(如果有的话)就行了:

sed 's|<p lang="en-US" class="western c31"></p>||g' hasil.html