如何使用 bash 脚本删除一行中两个 HTML 标记之间的字符串



我最近一直在研究一些简单的bash脚本,它解析网页中的特定数据。我使用tr 'rn' ' ' <file1.txt >file2.txt来确保从页面中提取的所有数据都存储在一行file1.txt中。因此,我需要匹配此行中<th>...</th>标签之间的所有字符串并删除它们或替换为' '符号。 所以这里有一些扩展代码:

<td>Abaktal hm</td> </tr> <tr> <th>Package</th> <td>flm 10x400 mg</td> <th>Indesit</th>

我用过sed并尝试过类似的东西

sed -i 's/<th>.*?</th>/ /g' output.txt

但它没有用。我认为问题出在?迹象上。它适用于正则表达式中的?符号,但可能不适用于bash

虽然我同意sputnick和其他人的观点,但你直接问题的答案是:

sed -ir 's/<th>[^<]+</th>//g'

这适用于您的示例数据。

<td>
Abaktal hm
</td>
<th>
Package
</th> 
<td>
flm 10x400 mg</td>
<th> 
Indesit
</th>

如果您有这种类型的输入,以下命令将起作用

sed -n '//{p; :a;N;//!ba;s/.*//};p' 输出.txt

它将删除之间的内容

<th>...</th> tags

欲了解更多信息 使用 SED 删除两个模式(不包括)之间的线条

你的尝试似乎绝对是错误的。

您无法实际使用Bash或实用程序(如grepsedcut)解析基于标记的标记语言(如HTMLXML)。如果只想转储/渲染HTML,请参阅(links|links2|lynx|w3m) -dumphtml2textvilistextum。有关分析数据片段的信息,请参阅tidy+(xmlstarlet|xmllint|xmlgawk|xpath|xml2)或了解xslt

  • https://blog.codinghorror.com/parsing-html-the-cthulhu-way/
  • 正则表达式匹配开放标签,但 XHTML 自包含标签除外

相关内容

  • 没有找到相关文章

最新更新