为什么顺序在 sed 中的转义字符 class 中很重要?
why does order matter in this escaped characters class in sed?
这按预期工作:
>echo -= | sed 's/[\=\-]//g'
>
但这不是:
>echo -= | sed 's/[\-\=]//g'
>-
为什么??
在字符 class 中,-
可用于创建范围(例如 [A-Z]
是从 A
到 Z
的所有字符,并且不是 A
、-
和 Z
).
这三个字符
因此,当您编写 [\-\=]
时,它被视为从 \
到 \=
的范围(我认为在这里转义 =
没有意义).
但是当你写 [\=\-]
时,范围解释是不可能的,因为 class 的终止 ]
不能是范围的结束。
同样,如果您写 [-\=]
,您将不会得到 class 的范围解释。
正如我所说,尽管我认为转义这两个字符中的任何一个都没有意义,但事实上,触发此问题的原因是 [-=]
的工作原理相同并且没有范围问题。
以类似的方式,在字符 class 的开头使用 ^
否定 class 所以如果你想在 [=41] 中使用文字 ^
=] 它需要 而不是 成为 class.
中的第一个字符
这按预期工作:
>echo -= | sed 's/[\=\-]//g'
>
但这不是:
>echo -= | sed 's/[\-\=]//g'
>-
为什么??
在字符 class 中,-
可用于创建范围(例如 [A-Z]
是从 A
到 Z
的所有字符,并且不是 A
、-
和 Z
).
因此,当您编写 [\-\=]
时,它被视为从 \
到 \=
的范围(我认为在这里转义 =
没有意义).
但是当你写 [\=\-]
时,范围解释是不可能的,因为 class 的终止 ]
不能是范围的结束。
同样,如果您写 [-\=]
,您将不会得到 class 的范围解释。
正如我所说,尽管我认为转义这两个字符中的任何一个都没有意义,但事实上,触发此问题的原因是 [-=]
的工作原理相同并且没有范围问题。
以类似的方式,在字符 class 的开头使用 ^
否定 class 所以如果你想在 [=41] 中使用文字 ^
=] 它需要 而不是 成为 class.