如何在bash中使用grep删除span标签?

时间:2014-04-01 01:49:09

标签: linux bash grep html

<span class="cur_name">This is a sentence </span>

我想得到&#34;这是一个句子&#34;部分并使用grep删除span标签。我该怎么办?

我不想使用awk | sed和其他任何东西因为我不熟悉它。谢谢!

4 个答案:

答案 0 :(得分:4)

这是一个糟糕的主意。你不应该只是因为你不知道电钻如何工作而使用锤子来打洞。

那说:

echo '<span class="cur_name">This is a sentence </span>' | \
    grep -o '>[^<]*<' | grep -o '[^<>]*'

答案 1 :(得分:2)

一般来说,你应该听从@glenn jackmann和@that其他人给出的建议:特别是用正则表达式解析HTML,一般使用正确的工具。


在Linux上,您可以使用grep使用-P和PCRE(Perl兼容的正则表达式),使用>选项。

这允许您使用所谓的环视断言为您所需的匹配提供上下文,而不在输出中包含该上下文。

最简单案例( <echo '<span class="cur_name">This is a sentence </span>' | grep -Po '(?<=>)[^<]*(?=<)' 之间的匹配):

(?<=>)
  • (?<=...),断言后面的 - > - 匹配(?=<)而不将其包括在匹配中。
  • (?=...),一个 - 提前断言 - < - ,匹配(?<=...)而不将其包括在匹配中。

如果您想灵活地匹配周围的标签,请按类型

后面的断言(<span>)受到限制,因为它们必须是固定长度。 因此,如果您想匹配任何打开\K标记,无论属性如何,您都可以使用echo '<span class="cur_name">This is a sentence </span>' | grep -Po '<span(\s+[^>]*)?>\K[^<]*(?=</span>)' 功能,该功能只会将匹配的一部分丢弃到左侧它:

echo '<span class="cur_name">This is a sentence </span>' |
  xidel -e '/span' -

最后,为了让您了解使用正确的工具可以轻松解析HTML / XML,这里有一个基于multi-platform web-scraping CLI xidel的解决方案:

{{1}}

答案 2 :(得分:1)

使用gnu grep

grep -Po '<span[^>]*>\K[^<]*' file

答案 3 :(得分:0)

您可以使用此awk

awk '{gsub(/<[^>]*>/, " ");$1=$1}1' file
This is a sentence

但最短且可能的最佳解决方案是sed

sed 's/<[^>]\+>//g' file
This is a sentence

sed -e 's/<[^>]*>//g' t
This is a sentence