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

删除所有html标记的sed命令行的分解,html,sed,tags,Html,Sed,Tags,我已经找到了使用sed删除html标记的方法。我偶然发现了这条线索: 用户“无用代码”建议如下: sed 's/<[^>]\+>//g' sed的/]\+>//g' 由于我是堆栈溢出的新手,因此还不允许对答案发表评论,所以我创建此线程是为了让您了解上面命令行的详细情况。 我知道“s”和“g”在代码中的作用,但是中间部分,特别是]\++>让我有点困惑 提前谢谢 [xyz]表示任何字符x、y或z。 [^xyz]相反,即x、y或z以外的任何字符。 所以[^>]表示除以外的任何字

我已经找到了使用sed删除html标记的方法。我偶然发现了这条线索:

用户“无用代码”建议如下:

sed 's/<[^>]\+>//g'
sed的/]\+>//g'
由于我是堆栈溢出的新手,因此还不允许对答案发表评论,所以我创建此线程是为了让您了解上面命令行的详细情况。 我知道“s”和“g”在代码中的作用,但是中间部分,特别是
]\++>
让我有点困惑


提前谢谢

[xyz]
表示任何字符x、y或z。
[^xyz]
相反,即x、y或z以外的任何字符。
所以
[^>]
表示除
以外的任何字符

正则表达式中后跟
+
的任何内容都表示“一个或多个”。所以
[^>]+
表示一个或多个非
字符

最后,
]+>
表示
后跟一个或多个非代码字符>,后跟
。所以基本上是

所有这些都放在
/
字符之间,以标记正则表达式搜索模式的开始和结束。第二个和第三个
/
之间的部分是任何找到的匹配项都要替换的部分。在本例中,这是一个空字符串,因为您只想删除标记

+
前面的反斜杠是因为默认情况下
sed
使用有限版本的正则表达式,您也可以通过使用
sed-E
来克服这一问题

因此
sed-E的//]+>//g'
(注意没有反斜杠)也可以工作


注意:您可能想知道是否也必须删除
。严格地说,这不是一个有效的HTML标记,但是如果它仍然出现,那么您可能也希望去掉它。因此,您可以使用
+
而不是
*
,它表示前面的零个或多个字符(而不是
+
表示一个或多个字符)。

它是“
后面跟一个或多个字符,而不是code>”。
+
量词被转义;这是对基本正则表达式的GNU扩展,它没有
+
量词,只有扩展正则表达式有量词。GNU BRE允许
\+
表达相同的内容。打破它;我将
\+
替换为
+
,因为regex101不支持GNU BRE风格。请注意,由于
sed
逐行工作,如果HTML标记跨多行断开,这将不起作用。使用正则表达式解析或以其他方式处理HTML最多只能在非常有限的情况下工作。