我已经查找了使用sed删除html标记的方法。我偶然发现了这个帖子:
Delete html tags in sed or similar
用户“无用代码”建议以下行:
sed 's/<[^>]\+>//g'
由于我是Stack Overflow的新手,因此还不允许对答案进行评论,所以我创建了这个帖子,要求您对上面的命令行进行分解。我知道"s“和"g”在代码中的作用,但是中间的部分,特别是<[^>]\+>
,让我很困惑。
提前感谢!
发布于 2018-06-16 04:52:31
[xyz]
指的是任何字符x、y或z。
[^xyz]
正好相反,即x、y或z以外的任何字符。
所以[^>]
指的是除>
之外的任何字符。
正则表达式中任何后跟+
的内容都表示“其中的一个或多个”。因此,[^>]+
表示一个或多个非>
字符。
最后,<[^>]+>
表示<
后跟一个或多个非>
字符,后跟>
。所以基本上就是<anything>
。
所有这些都放在/
字符之间,以标记正则表达式搜索模式的开始和结束。第2和第3个/
之间的部分是任何找到的匹配项都将被替换的部分。在本例中,它是一个空字符串,因为您只想删除标签。
+
前面的反斜杠是因为sed
默认使用有限版本的正则表达式,您也可以通过使用sed -E
来克服这一点。
所以sed -E 's/<[^>]+>//g'
(注意没有反斜杠)也可以使用。
注意:您可能想知道是否也必须删除<>
。严格地说,这不是一个有效的HTML标记,但是如果它出现了,你可能也想去掉它。因此,您可以使用*
来代替+
,这意味着没有或多个前面的字符(而不是+
,这意味着一个或多个字符)。
https://stackoverflow.com/questions/50882304
复制相似问题