Comportamento estranho ao tentar comparar hifens com grep 2.27

0

Eu tenho a seguinte string:

-----BEGIN 1_1 CERTIFICATE-----

A seguinte sequência não corresponde aos hífens:

grep -- "[A-Z\-\_]" file

Quando eu removo \_ , os hífens são correspondidos:

grep -- "[A-Z\-]" file

Se eu remover a barra invertida, receberei grep: Invalid range end . Também não importa se eu uso -E/egrep ou não - eu obtenho o mesmo resultado.

Qual é a razão para esse comportamento?

    
por chevallier 10.05.2018 / 19:28

1 resposta

7

Ao combinar hífens com [...] , o hífen precisa ser o primeiro ou o último dentro dele:

grep '[A-Z_-]' ...

Se você colocar o hífen em qualquer outro lugar, ele será considerado especificando um intervalo.

Além disso, \ é literal em [...] (se a expressão como um todo é citada no shell), então [\-] corresponde a uma barra invertida ou a um hífen e [\-_] provavelmente corresponde a \ , ] , ^ ou _ (esses são os caracteres no intervalo de \ a _ na tabela ASCII).

    
por 10.05.2018 / 20:18