У меня есть файл UTF в верхнем регистре, и я хочу изменить все слова на нижний регистр.Как изменить регистр файла UTF
Я попытался:
`$ tr '[:upper:]' '[:lower:]' <input.txt> output.txt`
но изменяется только cheracter без акцента.
Благодаря
У меня есть файл UTF в верхнем регистре, и я хочу изменить все слова на нижний регистр.Как изменить регистр файла UTF
Я попытался:
`$ tr '[:upper:]' '[:lower:]' <input.txt> output.txt`
но изменяется только cheracter без акцента.
Благодаря
Это потому, что классы символов по умолчанию работают только на стандартных ASCII, который не включает в себя большинство международных акцентированных символов. Если у вас есть определенный набор этих символов, самым простым способом было бы просто добавить отображение из специального символа верхнего регистра в специальный строчный символ вручную:
tr 'ÄÖU [: upper:]' 'äöü [: lower:] '
Если у вас есть только несколько символов с акцентом, это можно выполнить.
Нет, проблема в том, что 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
ñ
Вы правы! Но использование классов персонажей никогда не работало для меня до сих пор, ни в юникоде, ни в latin1, поэтому я давно не сдался и всегда делаю это вручную :-( – JeSuisse
Наконец, самый простой способ я нашел, чтобы использовать AWK:
awk '{print tolower($0)}' <input.txt> output.txt
Это действительно «правильный» путь об этом, так как 'awk' является Unicode-осведомленным, а' tr' - нет. Это должен быть принятый ответ. – DevSolar
Может быть, это принадлежит на суперпользователя? –
Конечно, ошибка, но я понятия не имею, как ее переместить. – liborw