Подтвердить что ты не робот

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 (должна!).

Что такое переносимый, надежный способ ввода текста в Юникоде в трубке?

4b9b3361

Ответ 1

Это то, что я нашел в Wikipedia (без каких-либо ссылок):

Большинство версий tr, включая GNU tr и классический Unix tr, работают с однобайтовыми символами и не совместимы с Unicode. Исключением является реализация Heirloom Toolchest, которая обеспечивает базовую поддержку Unicode.

Кроме того, этот является старым, но связанным.

Как я уже упоминал в комментарии, sed работает (GNU sed, по крайней мере):

$ echo 'СТЭК' | sed 's/[[:upper:]]*/\L&/'
стэк