В выражениях в скобках вам не нужно экранировать символы, так что это просто
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]
»