Tr [: upper:] [: lower:] с кириллическим текстом
Я пытаюсь извлечь список слов из русской истории.
#!/bin/sh
export LC_ALL=ru_RU.utf8
sed -re 's/\s+/\n/g' | \
sed 's/[\.!,—()«»;:?]//g' | \
tr '[:upper:]' '[:lower:]' | \
sort | uniq
Однако шаг tr
не содержит нижние заглавные буквы кириллицы. Я думал, что я умный, используя переносные классы символов!
$ LC_ALL=ru_RU.utf8 echo "Г" | tr [:upper:] [:lower:]
Г
Если это уместно, я получил русский текст, скопировав его из окна браузера Chrome в Vim. Он выглядит прямо на экране (терминал Putty). Это в оболочке Cygwin bash - она должна работать тождественно с bash в Linux (должна!).
Что такое переносимый, надежный способ ввода текста в Юникоде в трубке?
Ответы
Ответ 1
Это то, что я нашел в Wikipedia (без каких-либо ссылок):
Большинство версий tr
, включая GNU tr
и классический Unix tr
, работают с однобайтовыми символами и не совместимы с Unicode. Исключением является реализация Heirloom Toolchest, которая обеспечивает базовую поддержку Unicode.
Кроме того, этот является старым, но связанным.
Как я уже упоминал в комментарии, sed
работает (GNU sed
, по крайней мере):
$ echo 'СТЭК' | sed 's/[[:upper:]]*/\L&/'
стэк