Por que o regex in find não retorna nenhum resultado?

2

O comando

find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9\-\_\.]+\.(gz|deb)/' -exec echo {} \;

não produz resultados em um diretório contendo os seguintes arquivos:

  1. google-chrome-stable_current_i386.deb
  2. rkhunter-1.4.2.tar.gz

embora, ao testar a expressão regular [a-z0-9\-\_\.]+\.(gz|deb) em sites como RegExr , corresponda a esses nomes.

Por que o find não retorna nenhum resultado?

    
por Motivated 08.11.2015 / 08:41

1 resposta

2

Duas razões:

  1. Você encerrou sua string de regex com / . Os nomes de arquivos não terminam com / .
  2. Aparentemente RegExr tem um bug: para incluir um traço literal ( - ) em uma expressão de colchetes regex, deve ser o primeiro caractere, imediatamente após o [ (ou após o ^ inicial, se houver), ou o último caractere, imediatamente antes do ] . Você não tem permissão para colocá-lo no meio, nem mesmo com um \ na frente dele.

Mas também:

  1. ^ , - , [ e ] são os únicos caracteres individuais que são especiais em uma expressão de colchetes regex; você não precisa escapar de . - e não há motivo algum para escapar de _ .

Assim, seu regex poderia / deveria ser .*/[-a-z0-9_.]+\.(gz|deb) .

    
por 08.11.2015 / 09:57

Tags