Procurando arquivos contendo caracteres não-ASCII

2

Estou tentando encontrar arquivos em um diretório que contenha alguns caracteres Unicode não-ASCII. Os caracteres exatos que tenho que encontrar não são conhecidos de antemão.

Conceitualmente, essa deve ser uma tarefa fácil - encontre todos os arquivos que correspondem ao regex [^-e-\x7f] . No entanto, não consigo propor algo que possa realmente fazer isso.

A coisa mais próxima que eu consegui fazer é:

find . -type f -exec grep -Plv '[
find . -type f -exec grep -Plv '[%pre%-\x7f]' {} \;
-\x7f]' {} \;

que acaba listando a maioria dos arquivos de texto normais devido a correspondências nas linhas em branco.

A opção -P não é permitida em combinação com -e '[[%code%-\x7f]|^$-\x7f]' -e '^$' , portanto, não posso usar %code% , e a conversão da regex para %code% seria obviamente errada, porque agora é um "ou".

Existe outra maneira de procurar esses caracteres?

    
por user2064000 12.03.2017 / 20:22

1 resposta

3

Com grep -Pv '[-v-\x7f]' , você está pedindo linhas que não ( %code% ) contenham um caractere ASCII. Não é a mesma coisa que linhas que contêm um caractere não ASCII. Basta perguntar por isso.

LC_ALL=C grep -lP '[^
LC_ALL=C grep -l '[^[:print:]]'
-\x7f]'

Em vez de um intervalo de pontos de código, você pode solicitar caracteres não imprimíveis em uma localidade ASCII. Isso é quase equivalente (também inclui caracteres de controle).

LC_ALL=C grep -vlP '^[
LC_ALL=C grep -lP '[^
LC_ALL=C grep -l '[^[:print:]]'
-\x7f]'
-\x7f]*$'

Uma maneira equivalente e mais complicada é procurar por linhas que são inteiramente compostas de caracteres ASCII e inverter a correspondência.

LC_ALL=C grep -vlP '^[%pre%-\x7f]*$'
    
por 13.03.2017 / 01:04