Para identificar arquivos com o símbolo de hífen -
em nomes de arquivo como test-19.1.txt
, o find
comando combinado com uma expressão regular parece não corresponder.
O comando find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9\-\.]+\.txt' -exec echo {} \;
é executado em um shell bash e nenhum arquivo desse tipo é descoberto. Se o hífen for removido do nome do arquivo, a expressão regular corresponde.
A mesma expressão regular quando testada com regexr.com é bem-sucedida.
Para incluir um hífen em uma classe de caracteres, ele deve estar na primeira ou na última posição
Do manual de localização "o tipo de expressão regular usado por localizar e localizar é quase idêntico ao usado no GNU Emacs" e do manual do Emacs :
Portanto, seu regex deve ser
'.*/[a-z0-9.-]+\.txt'
Em POSIX BRE & ERE a mesma regra se aplica
Na verdade, a maioria das variantes de regex tem a mesma regra para combinar hífen
Tentar;
Dentro de uma expressão de colchetes:
^
, se usado) ou no final.\
. Em particular: não há necessidade de escapar de um ponto nem há uma maneira de escapar do significado especial de um traço (-
) com uma barra invertida.Então, o que você escreveu
[a-z0-9\-\.]
é entendido como um intervalo de\
até\
(ou apenas um\
).