find comando da expressão regular

0

Tenho dúvidas sobre a expressão regular.

Existem dois comandos.

find / -regex '.*[^-_./0-9a-zA-Z].*'

find /

Se eu estiver certo, esses dois comandos devem produzir os mesmos resultados. Porque, o primeiro comando tem expressão regular .* , que aparece em primeiro lugar. Isso significa "Encontre qualquer caractere e pode aparecer zero ou mais". Isso significa todo o nome do arquivo. Como os nomes de arquivos consistem em qualquer caractere, incluindo espaço em branco (""), e não é possível aparecer caractere zero (significa que o arquivo não tem nome). Então, afinal, acho que eles geram os mesmos resultados.

Mas quando eu uso esses comandos com | wc -l , que significa "saída das linhas de resultados", os resultados são diferentes.

Estou sentindo falta de algo?

    
por A.Cho 06.02.2016 / 10:30

2 respostas

2

Aqui está um exemplo -. * significa 0 ou mais de qualquer caractere. No segundo caso, corresponde a 0 de qualquer caractere seguido por um dos caracteres não excluídos.

ls 
1  a  =a  ++a  a.0  a_1  B  b0

find .
.
./B
./=a
./b0
./a_1
./a
./1
./a.0
./++a

find . -regex '.*[^-_./0-9a-zA-Z].*'
./=a
./++a
    
por 06.02.2016 / 14:58
2

.* é seguido por [^-_./0-9a-zA-Z] - e não é opcional. Portanto, algo diferente de um desses caracteres (os alfabetos, dígitos, - , _ , . e / ) deve aparecer uma vez no nome do arquivo. Qualquer caminho que contenha apenas esses caracteres não será impresso.

Portanto, esses comandos não precisam produzir os mesmos resultados.

    
por 06.02.2016 / 10:44