LINUX.ORG.RU
ФорумAdmin

Gentoo: Проблемы с локалью


0

0

после очередного обновления заметил, что регулярные выражения перестали воспринимать кириллицу.

echo 'hi all! всем привет' | grep --colour=auto -E '[[:alpha:]]+'

подкрашивает только hi и all. кириллица не подкрашена. если убрать латиницу, в выводе остается фраза, но не подкрашена.

echo 'hi all! всем привет' | pcregrep --colour=auto '[[:alpha:]]+'

ведет себя аналогично. если убрать латиницу, то вывод пуст.


$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

★★

[I] dev-libs/libpcre
Installed versions: 7.8(3)(14:26:49 18.09.2008)(bzip2 cxx unicode zlib -doc)
[I] sys-libs/glibc
Installed versions: 2.8_p20080602(2.2)(22:48:39 06.07.2008)(glibc-compat20 glibc-omitfp nls -crosscompile_opts_headers-only -debug -gd -hardened -multilib -profile -selinux -vanilla)
[I] sys-apps/grep
Installed versions: 2.5.1a-r1(03:35:32 06.07.2008)(nls pcre -static)

собственно вопрос: в чем причина?

Lucky ★★
() автор топика

Интересно...

>echo 'hi all! всем привет' | grep --colour=auto -E '[[:alpha:]]+'

Подкрашено всё, кроме "!".

подкрашивает только hi и all. кириллица не подкрашена. если убрать латиницу, в выводе остается фраза, но не подкрашена.

>echo 'hi all! всем привет' | pcregrep --colour=auto '[[:alpha:]]+'

Подкрашено только hi

>ведет себя аналогично. если убрать латиницу, то вывод пуст.

Аналогично.

KRoN73 ★★★★★
()
Ответ на: комментарий от Lucky

Кодировка терминала тоже utf-8 ?
Пробовал в kde-шной konsole переключить локаль на utf-8 и сделать
echo 'hi all! всем привет' | grep --colour=auto -E '[[:alpha:]]+'
подкрашивает действительно только англ. текст.
Но когда в меню konsole выбрал тоже кодировку utf-8 (до этого была koi8-r) - стало подкрашивать и русские буквы.
Т.е. исходя из utf-8 локали grep стал ориентироваться на новый набор символов, а, вставляя через буфер обмена эту команду в konsole, команда вставлялась в koi8-r. Получается, что несмотря на то, что русский был виден нормально, grep воспринимал его как какие-то левые символы, не буквы.
Можете попробовать еще так:
echo 'hi all! всем привет' | grep --colour=auto -E 'всем привет'
должно подсветить русский текст

spirit ★★★★★
()
Ответ на: комментарий от KRoN73

вообще заметил эту проблему когда регулярные выражения перестали работать с русским utf-8 в php (preg_*). консольный вариант глюка от терминала не зависит (gnome-terminal, xterm). пресловутая libpcre по всем признакам собрана-таки с поддержкой utf-8.

кстати с однобайтными у grep все ок:
echo 'hi all! всем привет' | iconv -f utf8 -t cp1251 | LANG=ru_RU.cp1251 grep --colour=always -E '[[:alpha:]]+' | iconv -f cp1251 -t utf8

как и положено красит весь текст, кроме "!" . pcregrep -- по прежнему только латиницу.

есть подозрение, что причина в районе новой glibc и генерации локали ru_RU.utf-8. во всяком случае на другом компе с подобным world но предыдущей glibc-2.7-r2 (glibc-2.8_p20080602 специально замаскировал) проблемы нет ни в php ни в grep. но как это отловить?

$ cat /etc/locale.gen

en_US ISO-8859-1
en_US.UTF-8 UTF-8
ru_RU.KOI8-R KOI8-R
ru_RU.CP1251 CP1251
ru_RU.UTF-8 UTF-8

# locale-gen

* Generating 5 locales (this might take a while) with 1 jobs
* (1/5) Generating en_US.ISO-8859-1 ... [ ok ]
* (2/5) Generating en_US.UTF-8 ... [ ok ]
* (3/5) Generating ru_RU.KOI8-R ... [ ok ]
* (4/5) Generating ru_RU.CP1251 ... [ ok ]
* (5/5) Generating ru_RU.UTF-8 ... [ ok ]
* Generation complete

Lucky ★★
() автор топика
Ответ на: комментарий от Lucky

>есть подозрение, что причина в районе новой glibc

У меня на этой машине - 2.6.1. На основной десктопной, скорее всего, тоже. Попозже проверю.

Давно уже перестал без надобности ставить ~arch для системных либ :) Только для прикладного софта, и то не всего.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.