Regex 对结束方括号求反

Regex 对结束方括号求反,regex,grep,Regex,Grep,以下内容不显示任何匹配项: echo "A" | egrep '[^\]]' 如果我将\[替换为\],它会工作。那么,如何匹配一个非闭方括号呢?在括号表达式中,您不必转义字符,所以它只是 grep '[^]]' 您也不需要egrep/grep-E,不涉及扩展正则表达式 你的另一次尝试 grep '[^\[]' 之所以有效,是因为[可以位于括号表达式中的任何位置,但]必须是第一个字符。由于您不必转义,\实际上是文本,结果将是“除\或[之外的任何内容”: 如果涉及更多字符,请确保将]粘贴到开头

以下内容不显示任何匹配项:

echo "A" | egrep '[^\]]'

如果我将
\[
替换为
\]
,它会工作。那么,如何匹配一个非闭方括号呢?

在括号表达式中,您不必转义字符,所以它只是

grep '[^]]'
您也不需要
egrep
/
grep-E
,不涉及扩展正则表达式

你的另一次尝试

grep '[^\[]'
之所以有效,是因为
[
可以位于括号表达式中的任何位置,但
]
必须是第一个字符。由于您不必转义,
\
实际上是文本,结果将是“除
\
[
之外的任何内容”:

如果涉及更多字符,请确保将
]
粘贴到开头:

grep '[]abc]'
grep '[^]abc]'
如果你没有,比如

grep '[^a]bc]'

表达式将被解释为“除
a
之外的任何内容,后跟
bc]

这只是一个简化的示例。考虑<代码> [^ ] ] < /代码>。解释器会不会因为认为第一个
]
结束字符类定义而感到困惑?@AlwaysLearning是的,它会
]
必须是表达式中的第一个字符,如果适用,只能在前面加上否定的
^
grep '[]abc]'
grep '[^]abc]'
grep '[^a]bc]'