Regex 如何在grep中转义方括号内的方括号

Regex 如何在grep中转义方括号内的方括号,regex,grep,escaping,regex-negation,Regex,Grep,Escaping,Regex Negation,我想匹配正则表达式中除方括号以外的字符 确切地说,我想匹配一些特殊字符,而另一些不匹配,因此我想指定它们 # grep $'[^a-zA-Z0-9#\\/:!<>{},=?. ()["_+;*\'&|$-]' file #grep$'[^a-zA-Z0-9#\/:!{},=?()[“+;*\”和|$-]”文件 这缺少了一个],我试过用\],\\]等来逃逸,我看到人们在[^]外面做这件事,但我需要它在里面!把]放在^后面 下面是一个示例。输入文件“foo”包含: foo [

我想匹配正则表达式中除方括号以外的字符

确切地说,我想匹配一些特殊字符,而另一些不匹配,因此我想指定它们

# grep $'[^a-zA-Z0-9#\\/:!<>{},=?. ()["_+;*\'&|$-]' file
#grep$'[^a-zA-Z0-9#\/:!{},=?()[“+;*\”和|$-]”文件

这缺少了一个
]
,我试过用
\]
\\]
等来逃逸,我看到人们在
[^]
外面做这件事,但我需要它在里面!

]
放在
^
后面

下面是一个示例。输入文件“foo”包含:

foo
[
bar
]
baz
quux
我们执行以下命令:

grep '[^][]' foo
输出为:

foo
bar
baz
quux
从以下文件:

如果右括号(']')出现在列表中的第一个位置(在首个扬抑符('^')之后,如果有),则右括号(']')将失去其特殊含义,并在括号表达式中表示

而且:

特殊字符“.”、“*”、“[”和“\”(分别为句号、星号、左括号和反斜杠)在括号表达式中将失去其特殊含义


您的表达式是正确的,但您的解释是错误的。大多数正则表达式的实现不将
\`识别为集合中的转义字符,因此您必须将
]`放在它不是语法一部分的某个地方-直接放在
[
[^
@GuntramBlohm你是对的。有趣的是,当时我的手指比我的大脑更知道该做什么。我已经纠正了解释。是的,它起作用了,但为什么需要这样做?有一个规范?@TiagoPimenta我添加了相关文档的链接和一些摘录。