【问题标题】:Removing HTML Tags from a text file从文本文件中删除 HTML 标签
【发布时间】:2017-04-13 23:25:21
【问题描述】:

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

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

我想去掉 &lt;p&gt;&lt;/p&gt; 标签并用换行符替换,所以我最终得到这样的结果:

Flannel
Plaid
Red

我正在尝试使用这个tr 命令:

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

但它只是删除了外部&lt;&gt;,所以我最终改为:

p
Flannel
/p

p
Plaid
/p

p
Red
/p

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

注意:我不在乎我是否会在整体之间添加多个换行符,如果需要,这些换行符很容易在以后删除。

【问题讨论】:

    标签: bash


    【解决方案1】:

    试试这个 -

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

    【讨论】:

      【解决方案2】:

      除非这是一个快速而肮脏的脚本,否则您绝对应该使用 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 不适用于字符串而是字符:它只是替换它找到的每个 &lt;[^&gt;]* 字符,而忽略您尝试编写正则表达式的事实。

      【讨论】:

      • 我之前尝试过sed,它会正确找到标签,但它只会用 n 或实际字符 \n 替换它们,而不是换行。我发现唯一可行的版本是:sed "s/&lt;[^&gt;]*&gt;/\`echo -e '\n\r'/g"`,它给了我想要的换行符,但也包含了时髦的 ^M 字符。
      • @CarrieBrown 所以,我的解决方案对你不起作用?
      • echo -e '\n\r' 很奇怪,我不知道任何系统会使用这种换行方式。删除\r(显示为^M)可能足以解决您的问题,但您不需要调用子shell 来生成换行符。如果我的答案中的\n 不起作用,请将其替换为文字换行符。
      • 我尝试删除 \r 也没有成功。我会尝试文字。
      • Here关于同一主题的另一个问题。
      【解决方案3】:

      把它们都放在同一个里面

      <p>
      

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

      &lt;p&gt;Flannel&lt;br&gt;Plaid&lt;br&gt;Red&lt;/p&gt;

      【讨论】:

      • 我想我不够清楚。我希望生成的文件没有所有 HTML,只是原始文本。这是一个相当大的文件,因此手动编辑标签是不可行的。
      猜你喜欢
      • 2020-12-27
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多