【问题标题】:How to replace any text between html tags如何替换html标签之间的任何文本
【发布时间】:2017-11-06 06:05:38
【问题描述】:

我在 html 标签之间有文本。例如:

<td>vip</td>

标签之间有任何文字&lt;td&gt;&lt;/td&gt; 如何从这些标签中剪切任何文本并在这些标签之间放置任何文本。 我需要通过 bash/shell 来完成。 我怎样才能做到这一点 ? 首先,我试图得到这个文本,但没有成功 sed -n "/&lt;td&gt;/,/&lt;\/td&gt;/p" test.txt。但结果我有 &lt;td&gt;vip&lt;/td&gt;。但根据文档,我应该只得到vip

【问题讨论】:

  • 首先,我尝试获取此文本,但没有成功sed -n "/&lt;td&gt;/,/&lt;\/td&gt;/p" test.txt。结果我有&lt;td&gt;vip&lt;/td&gt;。但根据文档,我应该只得到vip
  • 你应该使用 html 解析器,而不是正则表达式。
  • 您的 sed 尝试失败,因为它是一个线条工具,因此会打印出满足您条件的整行。
  • 首先,你能保证&lt;td&gt;&lt;/td&gt;标签在同一行吗?
  • 显示更多上下文,应该有父&lt;table&gt;标签

标签: bash shell sed replace grep


【解决方案1】:
d=$'<td>vip</td>\n<table>vip</table>\n<td>more data here</td>'
echo "$d"
<td>vip</td>
<table>vip</table>
<td>more data here</td> 

awk '/<td>/{match($0,/(<.*>)(.*)(<\/.*>)/,t);print t[1] "something" t[3];next}1' <<<"$d"
<td>something</td>
<table>vip</table>
<td>something</td>

awk '/<table>/{match($0,/(<.*>)(.*)(<\/.*>)/,t);print t[1] "something" t[3];next}1' <<<"$d"
<td>vip</td>
<table>something</table>
<td>more data here</td>

【讨论】:

    【解决方案2】:

    你可以试试这个:

    sed -i -e 's/\(<td>\).*\(<\/td>\)/<td>TEXT_TO_REPLACE_BY<\/td>/g' test.txt
    

    请注意,它仅适用于 &lt;td&gt; 标记。它将用TEXT_TO_REPLACE_BY 替换标签&lt;td&gt; 之间的所有内容(实际上是将它们放在一起并将标签放回原处)。

    【讨论】:

    • 如果 标签不在同一行,你将如何改变它?
    【解决方案3】:

    如果您的 Input_file 与所示示例相同,那么以下内容也可能对您有所帮助。

    echo "<td>vip</td>" | awk -F"[><]" '{print $3}'
    

    只需使用 echo 打印标签,然后使用 awk 创建字段分隔符 >

    【讨论】:

      【解决方案4】:

      您可以使用它来获取值vip

      sed -e 's,.*<td>\([^<]*\)</td>.*,\1,g'
      

      【讨论】:

        猜你喜欢
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 2016-03-29
        • 2019-08-27
        • 1970-01-01
        • 2014-08-15
        • 2021-07-21
        • 1970-01-01
        相关资源
        最近更新 更多