删除所有html标记的sed命令行细分

时间:2018-06-15 20:30:47

标签: html sed tags

我已经查找了使用sed删除html标签的方法。我遇到了这个帖子:

Delete html tags in sed or similar

用户"无用代码"建议如下:

sed 's/<[^>]\+>//g'

由于我是Stack Overflow的新手,因此尚未允许对答案发表评论,我正在创建此主题以询问您上面命令行的细分。 我知道&#34; s&#34;和&#34; g&#34;在代码中做,但那个中间部分,特别是<[^>]\+>,让我感到很困惑。

提前致谢!

1 个答案:

答案 0 :(得分:1)

[xyz]表示任何字符x,y或z [^xyz]是相反的,即任何字符其他而不是x,y或z 因此[^>]表示>以外的任何字符。

正则表达式中的任何内容后跟+表示&#34;其中一个或多个&#34;。因此,[^>]+表示一个或多个不是>的字符。

最后,<[^>]+>表示<后跟一个或多个不是>的字符,后跟>。所以基本上<anything>

所有这些都放在/个字符之间,以标记正则表达式搜索模式的开头和结尾。第2和第3 /之间的部分是任何找到的匹配将被替换。在这种情况下,这是一个空字符串,因为您只想删除标记。

+之前的反斜杠是因为sed默认使用正则表达式的限制版本,您也可以使用sed -E来解决此问题。

所以sed -E 's/<[^>]+>//g'(注意没有反斜杠)也行。

注意:您可能想知道是否还必须删除<>。严格来说,这不是一个有效的HTML标签,但无论如何它都会出现,你可能也想摆脱它。因此,您可以使用+代替*,而不是+,而不是bisect,这意味着一个或多个。{/ p>