2013-09-26 5 views
1

Моих попыток на RHEL 6.3:прописные буквы имен, имеющие международные письма, как éèàö

$ export LC_ALL=fr_FR.utf-8 
$ sed 's/ \([a-zA-Zé]\)\([^ ]*\) /[\u\1\L\2\E] /g' <<< " hélène NOËL étienne " 
hélène NOËL étienne 

$ export LC_ALL=C 
$ sed 's/ \([a-zA-Zé]\)\([^ ]*\) /[\u\1\L\2\E] /g' <<< " hélène NOËL étienne " 
[Hÿlÿne] [Noÿl] [ÿtienne] 

$ sed --version 
GNU sed version 4.2.1 
[...] 

ли может выводить следующее?

[Hélène] [Noël] [Étienne] 

ответ

1

Это нормально для вас?

kent$ echo " hélène NOËL étienne "|sed -r 's/(\S)(\S+)/[\U\1\L\2]/g' 
[Hélène] [Noël] [Étienne] 

мой СЭД версия ABIT отличается от вашего, но я думаю, что линия должна работать там:

kent$ sed --version |head -1 
sed (GNU sed) 4.2.2 

добавил свои региональные настройки, вы можете знать:

kent$ echo $LANG 
en_US.utf8 

kent$ locale 
LANG=en_US.utf8 
LC_CTYPE="en_US.utf8" 
LC_NUMERIC="en_US.utf8" 
LC_TIME="en_US.utf8" 
LC_COLLATE="en_US.utf8" 
LC_MONETARY="en_US.utf8" 
LC_MESSAGES="en_US.utf8" 
LC_PAPER="en_US.utf8" 
LC_NAME="en_US.utf8" 
LC_ADDRESS="en_US.utf8" 
LC_TELEPHONE="en_US.utf8" 
LC_MEASUREMENT="en_US.utf8" 
LC_IDENTIFICATION="en_US.utf8" 
LC_ALL= 
+0

Thanks Kent. Не могли бы вы добавить пояснения о значении '-r' и' \ S' (вы можете указать некоторые ссылки). Вы знаете разницу между локалями 'en_US' и' en_US.utf8'? Есть ли у вас какие-либо подсказки, почему сценарий [tag: sed] не работал с использованием 'en_US.utf8' locale? ура – olibre

1

Kent's answer не решил мою проблему, но я не предоставил ему все мои ограничения. Мой входной файл, как:

sfou;STéphane Foù - [email protected];; 
fbar;frédéric bâr - [email protected];; 
hnoel;Hélène NOËL - [email protected];; 

сценарий должен капитализировать только имена:

sfou;Stéphane Foù - [email protected];; 
8945;Frédéric Bâr - [email protected];; 
hnoel;Hélène Noêl - [email protected];; 

на основе Kent's help, я успешно прошел этот скрипт:

LC_ALL=fr_FR sed -r 's/(\w)(\w*) /\U\1\L\2 /g' test.cvs 

Другие языки не дают нужного результата:

$ LANG=fr_FR.utf8 LC_ALL= sed -r 's/(\w)(\w*) /[\U\1\L\2] /g' test.cvs 
sfou;STé[Phane] Foù - [email protected];; 
fbar;frédé[Ric] bâ[R] - [email protected];; 
hnoel;Hélè[Ne] NOË[L] - [email protected];; 

$ LANG=C LC_ALL= sed -r 's/(\w)(\w*) /[\U\1\L\2] /g' test.cvs 
sfou;STé[Phane] Foù - [email protected];; 
fbar;frédé[Ric] bâ[R] - [email protected];; 
hnoel;Hélè[Ne] NOË[L] - [email protected];; 

$ LANG=en_US.utf8 LC_ALL= sed -r 's/(\w)(\w*) /[\U\1\L\2] /g' test.cvs 
sfou;STé[Phane] Foù - [email protected];; 
fbar;frédé[Ric] bâ[R] - [email protected];; 
hnoel;Hélè[Ne] NOË[L] - [email protected];; 

Locales en_US и fr_FR (без .utf8) исправны:

$ LANG=en_US LC_ALL= sed -r 's/(\w)(\w*) /[\U\1\L\2] /g' test.cvs 
sfou;[Stéphane] [Foù] - [email protected];; 
fbar;[Frédéric] [Bâr] - [email protected];; 
hnoel;[Hélène] [Noël] - [email protected];; 

$ LANG=fr_FR LC_ALL= sed -r 's/(\w)(\w*) /[\U\1\L\2] /g' test.cvs 
sfou;[Stéphane] [Foù] - [email protected];; 
fbar;[Frédéric] [Bâr] - [email protected];; 
hnoel;[Hélène] [Noël] - [email protected];; 

Примечание: Я обнаружил \w от CodeGnome's links.

 Смежные вопросы

  • Нет связанных вопросов^_^