如何在字符类中转义闭括号字符?根据手册,要匹配文字]它应该放在列表的第一位,但我需要匹配由方括号组成的类的补充。
大多数元字符在括号表达式中失去了特殊含义。要包含文字,请将其放在列表中的第一位。同样,要包含一个文字^将它放在任何地方,但首先。最后,要包含一个文字 - 将它放在最后。
答案 0 :(得分:8)
]
通常是POSIX character class的结尾,或者表示字符类的结尾。
如果]
是该课程中的第一个字符( 可能会跟随未转义的插入符号 ),则表示该课程未结束,并且已评估作为可以在不逃避的情况下匹配的字符集的一部分。
echo "foo [22-Jun-2014 04:11:37 UTC] bar" | grep -o '\[[^]]*\]'
# [22-Jun-2014 04:11:37 UTC]
答案 1 :(得分:1)
这取决于实施。
grep -P
模式下,您实际上可以使用[][]
来匹配一个开头或结束括号的字符。[\]]
和[\[]
相关强>
答案 2 :(得分:1)
不幸的是,zx81的解决方案无效。特别是,输入:
[2014年6月22日04:11:37 UTC]
grep -o '.[^[\]]*'
失败。
根据结果,工作没有逃脱:
grep '^[[][^]]*]'
似乎grep仍然认为结束括号是第一个,即使前面有一个插入符号。
答案 3 :(得分:0)
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]
为什么这样做?
方括号被视为字符串,并且没有任何明确的转义字符,它们不是grep
正则表达式特殊文字的一部分。