186 votes

(grep) Regex pour correspondre à des caractères non-ASCII ?

Sur Linux, j'ai un répertoire avec beaucoup de fichiers. Certains d'entre eux ont des caractères non-ASCII, mais ils sont tous valides UTF-8. Un programme a un bug qui l'empêche de travailler avec des non-ASCII noms de fichiers, et je dois trouver combien sont touchés. J'allais le faire avec find , puis de faire un grep pour imprimer les caractères non-ASCII, et puis faire un wc -l pour le trouver. Il n'a pas à être grep, je peux utiliser n'importe quel standard Unix expression régulière, comme Perl, sed, AWK, etc.

Cependant, est-il une expression régulière pour "n'importe quel caractère qui n'est pas un caractère ASCII'?

332voto

Alix Axel Points 63455

Cela va correspondre à un seul caractère non-ASCII:

[^\x00-\x7F]

Ceci est valable PCRE (Perl Compatible Regular Expression).

Vous pouvez également utiliser la POSIX abréviations:

  • [[:ascii:]] - correspond à un seul ASCII char
  • [^[:ascii:]] - correspond à un seul non-ASCII char

[^[:print:]] suffira probablement pour vous.**

40voto

Peter L Points 101

Non, `` n’est pas ASCII.

Il s’agit de véritable ASCII :

Dans le cas contraire, il va couper les sauts de ligne et autres caractères spéciaux qui font partie de la table ASCII !

6voto

Rubens Farias Points 33357

Vous pourriez également pour vérifier cette page : Expressions régulières Unicode, car il contient certaines classes de caractères Unicode utiles, comme :

\p{Control} : un ASCII 0 x 00... 0x1F ou Latin-1, 0 x 80... caractère de contrôle de 0x9F.

2voto

tripleee Points 28746

Vous n’avez pas besoin vraiment une expression régulière.

Ceci affichera les noms de fichier avec des caractères de contrôle dans leurs noms, trop, mais je considère qu’une caractéristique.

Si vous n’avez pas tous les fichiers correspondants, la glob développera à rien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X