2012-03-27 23 views
9

En las distribuciones basadas en Debian, hay una utilidad llamada unaccent que se puede utilizar para eliminar acentos de las letras acentuadas en un texto.Cadena de unaccent en secuencia de comandos bash (RHEL)

Estaba buscando un paquete que incluyera esto en las distribuciones de Redhat, pero el único que encontré fue unac disponible solo para Mandriva.

Intenté usar iconv pero parece que no es compatible con mi caso.

¿Cuál es el mejor enfoque, liviano, fácilmente utilizable en un script bash? ¿Hay alguna opción secreta para iconv que lo permita?

+1

[ 'unaccent'] (http://www.nongnu.org/unac/unaccent-man1.en.html) no * elimina * caracteres acentuados, sino que "elimina [s] acentos del flujo de entrada o una cadena" ("été" cambia a "ete", no "t") - Esto se llama [intercalación] (https://en.wikipedia.org/wiki/Collation). ¿Realmente quieres * eliminar * personajes? – l0b0

+0

tienes toda la razón, quiero quitar acentos, gracias por la corrección :) (Acabo de arreglar la pregunta) –

Respuesta

13

Usted puede utilizar la opción -c (borrar) en iconv para eliminar caracteres no ASCII:

$ echo 'été' | iconv -c -f utf8 -t ascii 
t 

Si lo que desea es eliminar el acento:

$ echo 'été' | iconv -f utf8 -t ascii//TRANSLIT 
ete 
+0

Gracias, pero como @ l0b0 notado, lo que realmente quería es eliminar acentos no acentuados. ¿Hay alguna manera de hacer esto con iconv o cualquier otra herramienta? –

+0

perfecto, ahora es lo que necesitaba, gracias - probado con {echo 'Příliš žluťoučký kůňčep lábelské ódy' | iconv -t 'ASCII // TRANSLIT'} –

+2

Gran solución; desafortunadamente, no funciona correctamente en OSX, presumiblemente debido a un error (a partir de 'OS X 10.9.2', que viene con' GNU libiconv 1.11'): 'echo 'ü' | iconv -f UTF8 -t ASCII // TRANSLIT' produce '" u' en vez de 'u'. – mklement0

Cuestiones relacionadas