2012-03-27 2 views
9

Nelle distribuzioni basate su Debian, esiste un'utilità denominata unaccent che può essere utilizzata per rimuovere gli accenti da lettere accentate in un testo.Stringa non valida in bash script (RHEL)

Stavo cercando un pacchetto contenente questo su distribuzioni Redhat, ma l'unico che ho trovato era unac disponibile solo per Mandriva.

Ho provato a utilizzare iconv ma sembra non supportare il mio caso.

Qual è l'approccio migliore, leggero, facilmente utilizzabile in uno script bash? Ci sono delle opzioni segrete per iconv che consentono questo?

+1

[ 'unaccent'] (http://www.nongnu.org/unac/unaccent-man1.en.html) non * rimuove * i caratteri accentati, ma "rimuove [s] gli accenti dal flusso di input o una stringa" ("été" è cambiato in "ete", non "t") - Si chiama [collation] (https://en.wikipedia.org/wiki/Collation). Vuoi veramente * rimuovere * i caratteri? – l0b0

+0

hai assolutamente ragione, voglio rimuovere gli accenti, grazie per la correzione :) (Ho appena risolto la domanda) –

risposta

13

È possibile utilizzare l'opzione -c (trasparente) in iconv per rimuovere caratteri non-ASCII:

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

Se si desidera solo per rimuovere l'accento:

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

Grazie, ma come ho notato @ l0b0, quello che volevo veramente è rimuovere gli accenti non accentati. C'è un modo per farlo con iconv o qualsiasi altro strumento? –

+0

perfetto, ora è quello che mi serviva, grazie - testato con {echo 'Příliš žluťoučký kůň úpěl ďábelské ódy' | iconv -t 'ASCII // TRANSLIT'} –

+2

Ottima soluzione; sfortunatamente, non funziona correttamente su OSX, presumibilmente a causa di un bug (come per 'OS X 10.9.2', che viene fornito con' GNU libiconv 1.11'): 'echo 'ü' | iconv -f UTF8 -t ASCII // TRANSLIT' produce '" u' piuttosto che 'u'. – mklement0