regex - online - grep wildcard example
(grep) Regex para que coincida con caracteres que no sean ASCII? (7)
Esto coincidirá con un único carácter que no sea ASCII:
[^/x00-/x7F]
Este es un PCRE válido ( Expresión regular compatible con Perl ).
También puedes usar los shorthand de POSIX :
-
[[:ascii:]]
- coincide con un solo carácter ASCII -
[^[:ascii:]]
- coincide con un único carácter no ASCII
[^[:print:]]
probablemente sea suficiente para usted. **
En Linux, tengo un directorio con muchos archivos. Algunos de ellos tienen caracteres que no son ASCII, pero todos son UTF-8 válidos. Un programa tiene un error que impide que funcione con nombres de archivo que no sean ASCII, y tengo que averiguar cuántos se ven afectados. Iba a hacer esto con find
y luego hacer un grep para imprimir los caracteres que no son ASCII, y luego hacer un wc -l
para encontrar el número. No tiene que ser grep; Puedo usar cualquier expresión regular estándar de Unix, como Perl , sed , AWK , etc.
Sin embargo, ¿hay una expresión regular para ''cualquier personaje que no sea un personaje ASCII''?
Esto resultó ser muy flexible y extensible. $ campo = ~ s / [^ / x00- / x7F] // g; # por lo tanto, todos los elementos no ASCII o específicos en cuestión podrían limpiarse. Muy agradable ya sea en la selección o preprocesamiento de elementos que eventualmente se convertirán en claves hash.
No, [^/x20-/x7E]
no es ASCII.
Esto es ASCII real:
[^/x00-/x7F]
De lo contrario, recortará líneas nuevas y otros caracteres especiales que forman parte de la tabla ASCII.
Puedes usar esta expresión regular:
[^/w /xC0-/xFF]
Pregunta de caso, las opciones son Multiline .
Realmente no necesitas una expresión regular.
printf "%s/n" *[!/ -~]*
Esto también mostrará nombres de archivo con caracteres de control en sus nombres, pero considero que es una característica.
Si no tiene ningún archivo coincidente, el globo se expandirá a nada.
También puede consultar esta página: Expresiones regulares Unicode , ya que contiene algunas clases útiles de caracteres Unicode, como:
/p{Control}: an ASCII 0x00..0x1F or Latin-1 0x80..0x9F control character.
[^/x00-/x7F]
y [^[:ascii:]]
pierden algunos bytes de control por lo que las strings pueden ser la mejor opción a veces. Por ejemplo cat test.torrent | perl -pe ''s/[^[:ascii:]]+//n/g''
cat test.torrent | perl -pe ''s/[^[:ascii:]]+//n/g''
hará cosas extrañas en tu terminal, donde se comportarán las strings test.torrent
.