以下未显示任何匹配项:
echo "A" | egrep '[^\]]'
如果我放\[
而不是\]
,它会起作用。那么,如何匹配不是右方括号?
答案 0 :(得分:3)
在方括号表达式中,您不必转义字符,所以只是
grep '[^]]'
您也不需要egrep
/ grep -E
,不涉及扩展的正则表达式。
您的其他尝试,
grep '[^\[]'
之所以起作用,是因为[
可以在方括号表达式中的任何位置,但是]
必须是第一个字符。由于不必逃脱,因此\
实际上是文字,结果将是“ \
或[
以外的任何东西”:
grep '[^\[]' <<< '\'
不匹配。总而言之,要包含或排除方括号,您不必将其转义,并且]
必须是第一个字符:
grep '[[]' # match opening bracket
grep '[^[]' # match anything but opening bracket
grep '[]]' # match closing bracket
grep '[^]]' # match anything but closing bracket
,如果涉及更多字符,请确保将]
放在开头:
grep '[]abc]'
grep '[^]abc]'
如果不这样做,如
grep '[^a]bc]'
该表达式将被解释为“除a
后跟bc]
之外的任何内容”