<span class="cur_name">This is a sentence </span>
我想得到&#34;这是一个句子&#34;部分并使用grep删除span标签。我该怎么办?
我不想使用awk | sed和其他任何东西因为我不熟悉它。谢谢!
答案 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