2012-03-27 364 views
9

在基於Debian的發行版中,有一個名爲unaccent的實用程序,可用於從文本中的重音字母中刪除重音符號。bash腳本中的unaccent字符串(RHEL)

我正在尋找一個包含在Redhat發行版上的軟件包,但我發現的唯一一個是unac只適用於Mandriva。

我試圖用iconv,但它似乎不支持我的情況。

什麼是最好的,輕量級的方法,易於在bash腳本中使用? iconv是否有任何祕密選項允許這樣做?

+1

['unaccent']( http://www.nongnu.org/unac/unaccent-man1.en.html)不會*刪除*重音字符,而是「從輸入流或字符串中刪除重音符號」(「été」更改爲「ete」,而不是「t」) - 這稱爲[整理](https://en.wikipedia.org/wiki/Collat​​ion)。你真的要刪除*字符嗎? – l0b0 2012-03-27 12:41:56

+0

你是絕對正確的,我想刪除口音,感謝更正:)(我只是修復了這個問題) – 2012-03-27 14:16:49

回答

13

可以使用-c(清除)選項iconv除去非ASCII字符:

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

如果你只是想刪除的口音:

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

謝謝,但@10b0注意到,我真正想要的是刪除不重音字符的重音。有沒有辦法用iconv或任何其他工具做到這一點? – 2012-03-27 14:22:52

+0

完美,現在這是我所需要的,謝謝 - 測試{echo'Přílišžluťoučkýkůňúpělďábelskéódy'| iconv -t'ASCII // TRANSLIT'} – 2012-03-27 14:37:11

+2

偉大的解決方案;不幸的是,它在OSX上無法正常工作,大概是由於一個錯誤(例如'GNU libiconv 1.11'帶有'OS X 10.9.2'):'echo'ü'| iconv -f UTF8 -t ASCII // TRANSLIT'產生''u'而不是'u'。 – mklement0 2014-04-25 11:52:09