为什么顺序在 sed 中的转义字符 class 中很重要?

why does order matter in this escaped characters class in sed?

这按预期工作:

>echo -= | sed 's/[\=\-]//g'
>

但这不是:

>echo -= | sed 's/[\-\=]//g'
>-

为什么??

在字符 class 中,- 可用于创建范围(例如 [A-Z] 是从 AZ 的所有字符,并且不是 A-Z).

这三个字符

因此,当您编写 [\-\=] 时,它被视为从 \\= 的范围(我认为在这里转义 = 没有意义).

但是当你写 [\=\-] 时,范围解释是不可能的,因为 class 的终止 ] 不能是范围的结束。

同样,如果您写 [-\=],您将不会得到 class 的范围解释。

正如我所说,尽管我认为转义这两个字符中的任何一个都没有意义,但事实上,触发此问题的原因是 [-=] 的工作原理相同并且没有范围问题。

以类似的方式,在字符 class 的开头使用 ^ 否定 class 所以如果你想在 [=41] 中使用文字 ^ =] 它需要 而不是 成为 class.

中的第一个字符