从文本文件中删除HTML标记

时间:2017-04-13 15:12:10

标签: bash

我有一些看起来像这样的HTML:

`<p>Flannel</p><p>Plaid</p><p>Red</p>`

我想删除<p></p>标记并替换为换行符,因此我最终得到类似的内容:

Flannel
Plaid
Red

我正在尝试使用此tr命令:

tr '<[^>]*>' '\n'

但它只删除了外部的<>,所以我最终会改为:

p
Flannel
/p

p
Plaid
/p

p
Red
/p

如何修改它以删除整个标记?

注意:我不介意我是否最终在entires之间有多个新行,如果有必要,以后很容易删除。

3 个答案:

答案 0 :(得分:2)

试试这个 -

echo "<p>Flannel</p><p>Plaid</p><p>Red</p>"|awk '{gsub(/<[^>]*>/,"\n"); print }'

Flannel

Plaid

Red

答案 1 :(得分:1)

除非这是一个快速而又脏的脚本,否则你绝对应该使用HTML解析器来处理HTML语言的所有复杂性。

快速而肮脏的解决方案可能是应用此sed命令:

sed 's/<[^>]*>/\n/g'

我认为通过您的具体示例可以满足您的需求:

$ echo "<p>Flannel</p><p>Plaid</p><p>Red</p>" | sed 's/<[^>]*>/\n/g'

Flannel

Plaid

Red
 

您的解决方案不起作用,因为tr不会处理字符串,而是处理字符:它只是替换它找到的每个<[^>]*个字符,无视您的事实试图写一个正则表达式。

答案 2 :(得分:0)

将它们全部放在同一个

<p>

标签,然后在每个标签之间使用
标签添加换行符。 所以,代码应该是这样的:

<p>Flannel<br>Plaid<br>Red</p>