2010-07-16 2 views
0

У меня есть файл UTF в верхнем регистре, и я хочу изменить все слова на нижний регистр.Как изменить регистр файла UTF

Я попытался:

`$ tr '[:upper:]' '[:lower:]' <input.txt> output.txt` 

но изменяется только cheracter без акцента.

Благодаря

+0

Может быть, это принадлежит на суперпользователя? –

+0

Конечно, ошибка, но я понятия не имею, как ее переместить. – liborw

ответ

1

Это потому, что классы символов по умолчанию работают только на стандартных ASCII, который не включает в себя большинство международных акцентированных символов. Если у вас есть определенный набор этих символов, самым простым способом было бы просто добавить отображение из специального символа верхнего регистра в специальный строчный символ вручную:

tr 'ÄÖU [: upper:]' 'äöü [: lower:] '

Если у вас есть только несколько символов с акцентом, это можно выполнить.

0

Нет, проблема в том, что tr не поддерживает Unicode.

$ grep -o '[[:upper:]]' <<< JalapeÑo 
J 
Ñ 
$ tr '[:upper:]' '[:lower:]' <<< JalapeÑo 
jalapeÑo 

причина использовать [:upper:] и т.д., для того, чтобы обрабатывать символы за пределами ASCII. В противном случае вы можете просто использовать [A-Z] и [a-z]. Это также объясняет, почему PCRE имеет символьный класс называется [:ascii:]]:

$ perl -pe 's/[[:ascii:]]//g' <<< jalapeño 
ñ 
+0

Вы правы! Но использование классов персонажей никогда не работало для меня до сих пор, ни в юникоде, ни в latin1, поэтому я давно не сдался и всегда делаю это вручную :-( – JeSuisse

2

Наконец, самый простой способ я нашел, чтобы использовать AWK:

awk '{print tolower($0)}' <input.txt> output.txt 
+0

Это действительно «правильный» путь об этом, так как 'awk' является Unicode-осведомленным, а' tr' - нет. Это должен быть принятый ответ. – DevSolar

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