我已经查找了使用sed删除html标签的方法。我遇到了这个帖子:
Delete html tags in sed or similar
用户"无用代码"建议如下:
sed 's/<[^>]\+>//g'
由于我是Stack Overflow的新手,因此尚未允许对答案发表评论,我正在创建此主题以询问您上面命令行的细分。
我知道&#34; s&#34;和&#34; g&#34;在代码中做,但那个中间部分,特别是<[^>]\+>
,让我感到很困惑。
提前致谢!
答案 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>