Regex grep补码中的转义闭括号字符

Regex grep补码中的转义闭括号字符,regex,grep,Regex,Grep,如何在character类中转义紧括号字符?根据手册,要匹配文字]它应该放在列表的第一位,但我需要匹配由方括号组成的类的补码 大多数元字符在括号表达式中失去了特殊意义。要包含文字]请将其放在列表的第一位。类似地,要包含文字,请将其放置在除第一个以外的任何位置。最后,要包含一个文字,请将其放在最后 这取决于实施情况 在grep-P模式中,您实际上可以使用[][]来匹配作为开始括号或结束括号的字符 一般来说,最可移植的语法是转义:[\]和[\] 相关的 不幸的是,zx81的解决方案不起作用。特别

如何在character类中转义紧括号字符?根据手册,要匹配文字]它应该放在列表的第一位,但我需要匹配由方括号组成的类的补码

大多数元字符在括号表达式中失去了特殊意义。要包含文字]请将其放在列表的第一位。类似地,要包含文字,请将其放置在除第一个以外的任何位置。最后,要包含一个文字,请将其放在最后


这取决于实施情况

  • grep-P
    模式中,您实际上可以使用
    [][]
    来匹配作为开始括号或结束括号的字符
  • 一般来说,最可移植的语法是转义:
    [\]
    [\]
相关的


不幸的是,zx81的解决方案不起作用。特别是对于输入:

[2014年6月22日04:11:37 UTC]

失败了

起作用的是根本没有脱离封闭支架:

grep '^[[][^]]*]'
grep似乎仍然认为右括号是第一个字符,即使它前面有插入符号。

如何在字符类中转义右括号字符?
]
通常是字符的结尾,或者表示字符类的结尾

如果
]
是类中的第一个字符(可能跟在未转义插入符号之后),则它并不表示类的结束,而是作为可以匹配而不转义的字符集的一部分进行计算

echo "foo [22-Jun-2014 04:11:37 UTC] bar" | grep -o '\[[^]]*\]'
# [22-Jun-2014 04:11:37 UTC]
为什么这样做有效


方括号被视为字符串,没有任何显式转义字符,它们不是
grep
正则表达式特殊文本的一部分。

你的意思是
[\]]
?一个例子会更好。这是一个神秘的知识,应该是
grep-o.[^][*.
,即把
]
放在第一位。
echo "foo [22-Jun-2014 04:11:37 UTC] bar" | grep -o '\[[^]]*\]'
# [22-Jun-2014 04:11:37 UTC]
user$ sleep 400 &
[1] 13242
user$ sleep 500 &
[2] 13253
user$ jobs
[1]-  Running                 sleep 400 &
[2]+  Running                 sleep 500 &
user$ jobs | grep "sleep 400" | grep -o ^"["[0-9][0-9]*"]"
[1]
user$ jobs | grep "sleep 500" | grep -o ^"["[0-9][0-9]*"]"
[2]