2012-03-27 2 views
9

В дистрибутивах на базе Debian есть утилита под названием unaccent, которая может быть использована для удаления акцентов с акцентированных букв в тексте.Unaccent string в bash script (RHEL)

Я искал пакет, содержащий это на дистрибутивах Redhat, но единственный, который я нашел, был unac, доступный только для Mandriva.

Я попытался использовать iconv, но он, похоже, не поддерживает мой случай.

Каков наилучший, легкий подход, легко используемый в сценарии bash? Есть ли какие-либо секретные опции iconv, которые позволяют это?

+1

[ '] (unaccent' http://www.nongnu.org/unac/unaccent-man1.en.html) не * удаляет * акцентированные символы, но «удаляет [s] акценты из потока ввода или строки» («été» изменен на «ete», а не «t»). Это называется [сортировка] (https://en.wikipedia.org/wiki/Collation). Вы действительно хотите * удалить * персонажи? – l0b0

+0

вы абсолютно правы, я хочу удалить акценты, спасибо за исправление :) (я только что исправил вопрос) –

ответ

13

Вы можете использовать опцию -c (удалить) в iconv для удаления не ASCii символов:

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

Если вы просто хотите, чтобы удалить акцент:

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

Спасибо, но как заметил @ l0b0, я действительно хотел удалить акценты, а не акцентированные символы. Есть ли способ сделать это с помощью iconv или любого другого инструмента? –

+0

отлично, теперь это то, что мне нужно, спасибо - проверено с помощью {echo 'Příliš žluťoučký kůň úpěl ďábelské ódy' | iconv -t 'ASCII // TRANSLIT'} –

+2

Отличное решение; к сожалению, он не работает должным образом в OSX, предположительно из-за ошибки (как «OS X 10.9.2», которая поставляется с 'GNU libiconv 1.11'):' echo 'ü' | iconv -f UTF8 -t ASCII // TRANSLIT' выводит '' u', а не 'u'. – mklement0