Отрицание закрывающей квадратной скобки - PullRequest
0 голосов
/ 13 сентября 2018

Следующее не показывает совпадений:

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

Если я поставлю \[ вместо \], это будет работать.Итак, как мне сопоставить не закрывающую квадратную скобку ?

1 Ответ

0 голосов
/ 13 сентября 2018

В выражениях в скобках вам не нужно экранировать символы, так что это просто

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]»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...