GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué sed falla con los caracteres internacionales y cómo solucionarlo?

sed no está muy bien configurado para texto que no sea ASCII. Sin embargo, puedes usar (casi) el mismo código en perl y obtenga el resultado que desea:

perl -pe 's/.*\| //' x

Creo que el error ocurre si la codificación de entrada del archivo es diferente de la codificación preferida de su entorno.

Ejemplo:in es UTF-8

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

UTF-8 se puede interpretar con seguridad como ISO-8859-1, obtendrá caracteres extraños, pero aparte de eso, todo está bien.

Ejemplo:in es ISO-8859-1

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Gras Och Stenar Trad - From MöY
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

ISO-8859-1 no se puede interpretar como UTF-8, la decodificación del archivo de entrada falla. La coincidencia extraña probablemente se deba al hecho de que sed intenta recuperarse en lugar de fallar por completo.

La respuesta se basa en Debian Lenny/Sid y sed 4.1.5.


Linux
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. Bash =~ Regex y Https://regex101.com/?

  3. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  4. ¿Por qué find -exec mv {} ./target/ + no funciona?

  5. ¿Cómo uso sed para cambiar mis archivos de configuración, con claves y valores flexibles?

¿Qué es el comando Grep en Linux? ¿Por qué se usa y cómo funciona?

¿Cómo reemplazar recursivamente los caracteres con sed?

Cómo configurar ssh sin contraseña con claves RSA

¿Cómo cambiar el nombre de todos los archivos con caracteres especiales y espacios en un directorio?

Cómo usa Linux /dev/tty y /dev/tty0

¿Por qué el enlace de montaje de un archivo después de desvincular falla con ENOENT?