取反右方括号

时间:2018-09-13 16:53:55

标签: regex grep

以下未显示任何匹配项:

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

如果我放\[而不是\],它会起作用。那么,如何匹配不是右方括号

1 个答案:

答案 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]之外的任何内容”