LINUX.ORG.RU

Русские буковки


0

1

Поможите, люди добрые!

В общем, нужно либо выделить из текстового файла все строки, содержащие русские буковки.

Либо определить, содержит ли строка русские буковки.

Последнее, в принципе, предпочтительнее.

А так же, может быть, кто-нибудь знает утилитки (ну или алгоритмы), умеющие переводить какое-нибудь «Ghjcnj ntrcn nfrjq rhbdjq» в нормальный русский текст?

★★★★★
Ответ на: комментарий от emulek

Диапазоны зависят от локали!

И тут поведение grep зависит от того, как он был собран, --without-included-regex или --wth-included-regex.

С --with-included-regex всё работает правильно.

anarquista ★★★★★
()
Ответ на: комментарий от bormant
$ echo Ghjcnj ntrcn nfrjq rhbdjq |\
sed 'y/QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>qwertyuiop[]asdfghjkl;'"'"'zxcvbnm,./ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю/'

Просто текст такой кривой

emulek
()
Ответ на: комментарий от anarquista

ru_RU.UTF-8 это стандартное для русского языка

4.2! Это в каком ГОСТе написано, что говно-юникод — стандарт? Что за бред?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anarquista

Диапазоны зависят от локали!

я знаю. Что орёшь?

С --with-included-regex всё работает правильно.

у меня так и собрано, успокойся. Просто у меня LC_COLLATE=C, что-бы не ломать скрипты и что-бы быстрее работало.

emulek
()
Ответ на: комментарий от anarquista

Что значит НЕСТАНДАРТНОЕ? ru_RU.UTF-8 это стандартное для русского языка! Я русский!

русофил что-ли?

А КАКОГО ХРЕНА У ТЕБЯ LC_COLLATE=ru_RU.UTF-8 БАСУРМАНСКИМИ ЗНАЧКАМИ НАПИСАНО???!!! ЧИТАЙ РОЗЕНТАЛЯ, И ИЩИ СЛОВО COLLATE!!!!111

emulek
()
Ответ на: комментарий от Eddy_Em

А в чем сакральный смысл делать LC_COLLATE=C?

как раз в том и смысл, что-бы буквы НЕ СОРТИРОВАТЬ. Это время отнимает, и ведёт к неожиданным глюкам. А без сортировки как ты узнаешь, что Ф лежит МЕЖДУ А-Я?

emulek
()
Ответ на: комментарий от Eddy_Em

Я даже не знаю, используется ли он где-нибудь...

В Искре 1030.11 в ПЗУ знакогенератора были зашиты 4 таблицы с возможностью переключения налету с клавиатуры или командой в порт, первой/основной была как раз гостовская.

А альтернативная кодировка, несмотря на разрыв в последовательности русских символов блоком символов псевдографики, прижилась из-за наличия в VGA режима с автоматической подсветкой 9-го пикселя как раз для указанного диапазона. Если же там расположить буковки, имеющие активной 8-ю точку, они получали уродливое утолщение справа на тот самый 9-й пиксель (речь о текстовых режимах).

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

Ты ему предлагаешь его koi8-r не сортировать? И диапазоны разворачивать ручками?

а зачем их сортировать и разворачивать? Скрипт вроде этого работает правильно в любой кодировке, хоть utf, хоть кои. А для диапазона нужна информация, о том, КАКИЕ это байты, и ЧТО они означают.

emulek
()
Ответ на: комментарий от emulek

работает правильно в любой кодировке

Конечно, правильно, он к раскладке прибит.

LC_COLLATE=C
о том, КАКИЕ это байты, и ЧТО они означают.

Сначала херим информацию, потом плачемся. Ну да с диапазонами подвохов много: нужно учесть кодировку, collation, для гнутого grep как подсказывают еще ?-included-regex.

anonymous
()
Ответ на: комментарий от x3al

Сначала рабочий вариант выкати (а еще лучше рецепт, как быстро его написать), бо твой вариант в общем случае не катит.

// для изначально проблемы да, строки с кириллицей, но без русских символов были бы странным входом

anonymous
()
Ответ на: комментарий от anonymous

работает правильно в любой кодировке

Конечно, правильно, он к раскладке прибит.

можно подумать, что [а-я] не прибит...

Сначала херим информацию, потом плачемся. Ну да с диапазонами подвохов много: нужно учесть кодировку, collation, для гнутого grep как подсказывают еще ?-included-regex.

я не понимаю твоего возмущения. Ты завидуешь, что в твоей говнооси это не работает?

emulek
()
Ответ на: комментарий от anonymous

echo і | grep '[а-я]'?

echo -n і | hexdump -C
d1 96

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024
U+0456 і d1 96 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I

echo -e "з\nи\nй\nк\nі" |sort
з
и
і
й
к
По порядку сортировки (COLLATE) она в диапазоне [а-я]. Что не так? Если нужен не диапазон, тогда и не надо его использовать, перечислив нужное руками.

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

Сначала рабочий вариант выкати (а еще лучше рецепт, как быстро его написать), бо твой вариант в общем случае не катит.

если именно кириллицу, то [абвгдеёжзиклмнопрстуфхцчшщьыъэюя]. Если просто букву, то \w (она ессно и с латиницей матчится, и с китайскими иероглифами тоже).

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

почему?

emulek
()
Ответ на: комментарий от anonymous

echo і | grep '[а-я]'? По-моему, это гвозди.

что не так?

emulek
()
Ответ на: комментарий от bormant

Что не так?

Скромно напомню, что тема была про _русские буквы_, а не кириллицу.

перечислив нужное руками

С чего бы? Возьму халяльный plan9-ports, вспомню как символы идут в юникоде, что 0x400-0x4FF отображает «чотко», укажу COLLATE=C (для страховки, он все равно вряд ли умеет) и 9 grep '[ёа-я]'.

anonymous
()
Ответ на: комментарий от anonymous

utf8 отображает

Юникодные 0x400-0x4FF кодируются в utf8 как 0xd0 0x80 — 0xd3 0xbf.
utf8 — это лишь один из способов кодирования юникодных codepoints.

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

если именно кириллицу, то [абвгдеёжзиклмнопрстуфхцчшщьыъэюя]

То есть надо каждый раз вводить? Стабильне^Wнадежненько, и окружение может быть неродным (то есть ru_letters.txt уже не подходит).

почему?

Если будет осмысленная строка, то вероятно будут и символы из русского алфавита => нужно подсвечивать. (В любом случае маловероятность такого входа ослабляет мой аргумент: рус ⊂ cyr , типа «уступка».)

anonymous
()
Ответ на: комментарий от bormant

Юникодные 0x400-0x4FF кодируются в utf8 как 0xd0 0x80 — 0xd3 0xbf.

Спасибо, знаю, и к чему вы это, батенька? Не отрицаю, что мой вариант предназначен для utf-8 локали.

anonymous
()
Ответ на: комментарий от emulek

можно подумать, что [а-я] не прибит...

utf-8 локаль, русский/кириллица: Для [а-я] могу перед gnu/grep без included-regex указать LC_COLLATE, или взять плановский. koi8-r: для кириллицы, как показал эдди - сойдет.

Ты завидуешь, что в твоей говно_оси_ это не работает?

В какой это, мистер мессинг?

anonymous
()
Ответ на: комментарий от anonymous

Скромно напомню, что тема была про _русские буквы_, а не кириллицу.

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

emulek
()
Ответ на: комментарий от anonymous

То есть надо каждый раз вводить?

ну если тебе нужны только ЭТИ буквы, то да, ввести нужно. Если твой комп не умеет сохранять строки — да, каждый раз. Если ты идиот — да, это неизлечимо.

Стабильне^Wнадежненько, и окружение может быть неродным (то есть ru_letters.txt уже не подходит).

может быть всё что угодно.

Если будет осмысленная строка, то вероятно будут и символы из русского алфавита

ORLY?

emulek
()
Ответ на: комментарий от anonymous

Ты завидуешь, что в твоей говно_оси_ это не работает?

В какой это, мистер мессинг?

телепатия за дополнительную плату.

emulek
()
Ответ на: комментарий от emulek

ORLY?

Было сугубо субъективное мнение, впрочем, не откажусь от (не маловероятного) примера символов на 50.

anonymous
()
Ответ на: комментарий от emulek

телепатия за дополнительную плату

Значит, я тебе уже должен? Сумму долга и процент за несвоевременное погашение можно озвучить?

anonymous
()
Ответ на: комментарий от anonymous

Было сугубо субъективное мнение, впрочем, не откажусь от (не маловероятного) примера символов на 50.

ja tebe i bol'she mogu napisat', osobenno esli mojno citiroivat' (:

emulek
()
Ответ на: комментарий от anonymous

телепатия за дополнительную плату

Значит, я тебе уже должен?

увы...

Сумму долга и процент за несвоевременное погашение можно озвучить?

эта услуга бесплатная лишь при установке нашей libastral.so.

emulek
()
Ответ на: комментарий от anonymous

ну это не моя идея была. Ни [а-я] ни хрень на перловке я не предлагал. Своё решение я изложил здесь. и отвечать буду только за него, а не за чужой говнокод. Там как заказывали — только русская кириллица.

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