gpt4 book ai didi

linux - 使用 sed 提取 HTML 数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:42 29 4
gpt4 key购买 nike

如果我有一行 HTML

<td><em>data</em></td>

如何打印到标准输出

<em>data</em>

如果行首和行尾恰好

<td>

</td>

标签准确。如果该行不是以 td 标签开始或结束,则不要打印该行。

我试过了

sed 's/<td>\(*\)</td>/\1/'

但它并不完全有效。
提前致谢。

最佳答案

应该这样做:

echo "<td><em>data</em></td>" | awk '{gsub(/<\/?td>/,x)}8'
<em>data</em>

或者这个:

echo "<td><em>data</em></td>" | sed 's|</*td>||g'
<em>data</em>

或者这样:(更准确地说,因为 ? 只代表一个字符)

echo "<td><em>data</em></td>" | sed 's|</\?td>||g'
<em>data</em>

检查你的工作有什么问题sed 's/<td>\(*\)</td>/\1/'你快到了,但是这个\(*\)不起作用,因为它现在不重复什么 *
添加一个简单的 .使它有效,因为它代表任何字符。所以应该是\(.*\)
在第二个td有一个正斜杠 / .由于您使用的是 /因为分隔符必须是
像这样逃脱了/\给予 <\/td>所以这是有效的:

echo "<td><em>data</em></td>" | sed 's/<td>\(.*\)<\/td>/\1/g'
<em>data</em>

可以改成:

echo "<td><em>data</em></td>" | sed 's|<td>\(.*\)</td>|\1|g'
<em>data</em>

但是正如你在我上面的例子中看到的,没有必要使用反向引用。最好只是
删除不需要的内容。


如果这个if the beginning and end of the line have exactly意味着行的开始/结束仅此而已。
反向引用:

sed 's|^<td>\(.*\)</td>$|\1|g'

只是删除:

sed 's:^<td>\|</td>$::g' 

awk :

echo "<td><em>data</em></td>" | awk '{gsub(/^<td>|<\/td>$/,x)}8'
<em>data</em>

关于linux - 使用 sed 提取 HTML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273646/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com