Eu tenho a seguinte string:
-----BEGIN 1_1 CERTIFICATE-----
A sequência a seguir não corresponde aos hífens:
grep -- "[A-Z\-\_]" file
Quando removo, \_
os hífens são correspondidos:
grep -- "[A-Z\-]" file
Se eu remover a barra invertida, recebo grep: Invalid range end
. Além disso, não importa se eu uso -E/egrep
ou não - obtenho o mesmo resultado.
Qual é a razão desse comportamento?
Ao combinar hífens com um
[...]
, o hífen precisa ser o primeiro ou o último dentro dele:Se você colocar o hífen em qualquer outro lugar, será considerado como especificando um intervalo.
Além disso,
\
é literal em[...]
(se a expressão como um todo estiver entre aspas no shell), então[\-]
corresponde a uma barra invertida ou a um hífen e[\-_]
provavelmente corresponde a um\
,]
ou^
(_
esses são os caracteres no intervalo de\
a_
na tabela ASCII).