[РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском

Ответить
Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

[РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 17:43

Код: Выделить всё

$ echo 'ܫܠܡܐ' > peace
$ egrep '\<[ܐ-ܬ]' peace
grep: Неверный знак сортировки
$ awk /'\<[ܐ-ܬ]'/ peace
ܫܠܡܐ
$

Я посмотрел на сайте GNU, вроде бы там есть версия grep поновее, чем в Росе. Мне самому, в принципе, достаточно и awk'a, но, вообще говоря, если есть более новая grep, то почему бы ей не быть в Росе?..

PS: в арабском egrep интервалы понимает.
Последний раз редактировалось Delles 20 дек 2015, 11:58, всего редактировалось 1 раз.
Talk is cheap. Show me the code.
Linus Torvalds

keleg
Сообщения: 5387
Зарегистрирован: 15 сен 2011, 01:58

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение keleg » 09 окт 2015, 17:44

Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.

Аватара пользователя
Barmalei
Сообщения: 4777
Зарегистрирован: 29 дек 2014, 15:45
Operating system: Intel Pentium 2020M / 6 Gb RAM / AMD GRadeon HD 8570 / Rosa Fresh R10 KDE 2016.1 x64

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Barmalei » 09 окт 2015, 17:52

keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Арабский язык, но у него несколько диалектов.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 17:57

keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Стыдно сказать, но я поленился до 41 обновиться. А вообще у Огнелиса с письменностями всё очень хорошо (сужу по колонке языков в Википедии и, особенно, по сайту с переводами песен Высоцкого — последний словно создан для тестирования восприимчивости браузера к письменностям). Хромиуму приходилось кое-какие нужные мне шрифты доустанавливать, а Огнелис — всегда готов.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 18:00

Barmalei писал(а):Арабский язык, но у него несколько диалектов.
Сирийский — это не арабский. Это язык арамейской группы со своими разновидностями письма.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Barmalei
Сообщения: 4777
Зарегистрирован: 29 дек 2014, 15:45
Operating system: Intel Pentium 2020M / 6 Gb RAM / AMD GRadeon HD 8570 / Rosa Fresh R10 KDE 2016.1 x64

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Barmalei » 09 окт 2015, 18:05

Delles писал(а):
Barmalei писал(а):Арабский язык, но у него несколько диалектов.
Сирийский — это не арабский. Это язык арамейской группы со своими разновидностями письма.
А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 18:16

Barmalei писал(а):А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.
Совсем-совсем не арабский, и не аравийский. Посмотрите в Википедии статьи "Сирийский язык" и "Сирийское письмо".
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Barmalei
Сообщения: 4777
Зарегистрирован: 29 дек 2014, 15:45
Operating system: Intel Pentium 2020M / 6 Gb RAM / AMD GRadeon HD 8570 / Rosa Fresh R10 KDE 2016.1 x64

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Barmalei » 09 окт 2015, 18:19

Delles писал(а):
Barmalei писал(а):А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.
Совсем-совсем не арабский, и не аравийский. Посмотрите в Википедии статьи "Сирийский язык" и "Сирийское письмо".
Мы наверное в разных Википедиях сидим.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 18:24

Barmalei писал(а):Мы наверное в разных Википедиях сидим.
Сирийский язык: https://ru.wikipedia.org/wiki/%D0%A1%D0 ... 1%8B%D0%BA

Сирийское письмо:
https://ru.wikipedia.org/wiki/%D0%A1%D0 ... 0%BC%D0%BE
Talk is cheap. Show me the code.
Linus Torvalds

keleg
Сообщения: 5387
Зарегистрирован: 15 сен 2011, 01:58

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение keleg » 09 окт 2015, 18:27

Delles писал(а):
keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Стыдно сказать, но я поленился до 41 обновиться. А вообще у Огнелиса с письменностями всё очень хорошо (сужу по колонке языков в Википедии и, особенно, по сайту с переводами песен Высоцкого — последний словно создан для тестирования восприимчивости браузера к письменностям). Хромиуму приходилось кое-какие нужные мне шрифты доустанавливать, а Огнелис — всегда готов.
А скажите шрифты? Добавим.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 19:12

keleg писал(а):А скажите шрифты? Добавим.
Прекрасная мысль! Пусть Роса будет еще лучше и в этом отношении.

Сирийские шрифты можно взять здесь: http://www.bethmardutho.org/index.php/r ... fonts.html
Функционально нужные там:
SyrCOMEdessa.otf – эстрангела
SyrCOMNisibin.otf – восточносирийский
SyrCOMUrhoy.otf – западносирийский

Коптский шрифт здесь: http://www.moheb.de/unicode_coptic_fonts.html
Самый используемый: Antinoou
К сожалению, сервер работает плохо. Мне пришлось идти на archive.org, заходить на сохраненную копию этого сайта и скачивать шрифт оттуда. Ирония судьбы в том, что на archive.org тоже доступ нестабильный, но через плагин anonymoX открывается всегда.

Деванагари (chandas) можно взять здесь: http://www.sanskritweb.net/cakram/

Уйгурско-старомонгольский шрифт я получил от коллег. Он называется monbaiti.ttf но в сети я навскидку не нашел его в доступе. О наличии или отсутствии монгольского шрифта можно судить, переключившись на китайскую страницу Википедии о ком-нибудь из ханов, например, Чингисе — https://zh.wikipedia.org/wiki/%E6%88%90 ... D%E6%B1%97
snapshot58.png
Что касается арабского, то пока что из мной опробованных безупречно работает в LO только Times New Roman, остальные мне известные делают ошибки при растягивании строк. Но в ближайшем будущем, возможно, положение изменится в лучшую сторону благодаря объявленному Ubuntu развитию арабской реализации — https://www.surveymonkey.com/r/ubuntuarabicfonttesting
Тот шрифт, который они планируют как собственно убунтовский (для интерфейса), конечно, несерьёзен, но есть надежда, что на этой волне появятся хорошие арабские шрифты, нужно следить за проектом.

Спасибо!
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 09 окт 2015, 21:01

keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Ура! Теперь и ранее не работавшие лигатуры (ComposeKey) работают.
Спасибо!!!
Talk is cheap. Show me the code.
Linus Torvalds

keleg
Сообщения: 5387
Зарегистрирован: 15 сен 2011, 01:58

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение keleg » 10 окт 2015, 05:22

во-во, правильное слово, лигатуры :-)

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 10 окт 2015, 09:28

Прошу прощения за поддержку оффтопа, но спор похоже возник на ровном месте.
Delles писал(а):
Barmalei писал(а):А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.
Совсем-совсем не арабский, и не аравийский. Посмотрите в Википедии статьи "Сирийский язык" и "Сирийское письмо".
Воспользуюсь "оригиналом" предложенных статей: https://en.wikipedia.org/wiki/Syriac_language
…also known as Syriac Aramaic, is a dialect of Middle Aramaic…
Верно, "арамейский".

Смотрим дальше (в русскоязычной версии информация отсутствует):
Many Syriac words, like those in other Semitic languages…

идём дальше: https://en.wikipedia.org/wiki/Semitic_languages
Among them are the Ugaritic, Phoenician, Aramaic, Hebrew, Syriac, Arabic, and South Arabian alphabets.
Видно, что результат зависит (как минимум) от способа классификации, а так же от языка Википедии.
Так что я бы воздержался от категоричных отрицаний.

Так можно дойти и до вопроса : на каком языка написан Линух, на С, или на английском… :)

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 10 окт 2015, 12:59

trs писал(а):Semitic_languages
Among them are the Ugaritic, Phoenician, Aramaic, Hebrew, Syriac, Arabic, and South Arabian alphabets.
Понятно, что и сирийский, и арабский — семитские. Но утверждать на этом основании, что сирийский — ­это арабский, столь же нелепо, как утверждать, что еврейский — это арабский, оба ведь тоже семитские. Сирийский — это не арабский, речь была только об этом.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 10 окт 2015, 14:55

Delles, мы с Вами тоже говорим на разных языках, хотя формально он один. На "этом" основании подобных утверждений не было. Мой пост вообще был о том, что вместо "совсем-совсем не" корректней было бы написать "принято относить к…", что бы избежать малоинформативного спора.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 10 окт 2015, 15:57

trs писал(а):Delles, мы с Вами тоже говорим на разных языках, хотя формально он один. На "этом" основании подобных утверждений не было. Мой пост вообще был о том, что вместо "совсем-совсем не" корректней было бы написать "принято относить к…", что бы избежать малоинформативного спора.
Как минимум грамматически у нас с Вами язык один, лексически — в общем тоже, письменность одна и та же. А у сирийского с арабским разные грамматики, разная лексика, разные письменности. Ни один араб никогда не признает, что сурйāнӣ — это его язык. Если Вам больше нравится "принято относить", я не возражаю. Я возражаю только против утверждения, что сирийский — это арабский. Так же возражал бы, если бы кто-то сказал, что болгарский — это русский (оба славянские). За оффтоп, конечно, прошу прощения у сообщества, но сирийским и арабским я занимаюсь уже 20 лет, поэтому неточности такого уровня хочется устранить.
Talk is cheap. Show me the code.
Linus Torvalds

keleg
Сообщения: 5387
Зарегистрирован: 15 сен 2011, 01:58

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение keleg » 10 окт 2015, 15:59

ну, это уж явный оффтопик, завязывайте :-)

evb0110
Сообщения: 46
Зарегистрирован: 25 сен 2015, 11:38
Operating system: Rosa

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение evb0110 » 10 окт 2015, 22:46

Возможно, кому-то пригодится — надеюсь, не офтоп.
Сегодня решал проблему неюникодного же grep'a на Mac OS. По совету опытных товарищей установил MacPorts, установил его grep, сделал "export LC_ALL=en_US.UTF-8", и всё заработало:

Код: Выделить всё

evb-iMac:~ evb$ echo ГОЛОВА | grep [Г-Д]
ГОЛОВА
evb-iMac:~ evb$ echo ГОЛОВА | grep [Ж-З]
evb-iMac:~ evb$  

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 10 окт 2015, 22:51

evb0110 писал(а):

Код: Выделить всё

evb-iMac:~ evb$ echo ГОЛОВА | grep [Г-Д]
ГОЛОВА
А не проверите, понимает ли egrep сирийский интервал по ܫܠܡܐ ; например, [ܫ-ܬ] ?
Если работает, то точно нужно egrep обновлять.
Talk is cheap. Show me the code.
Linus Torvalds

evb0110
Сообщения: 46
Зарегистрирован: 25 сен 2015, 11:38
Operating system: Rosa

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение evb0110 » 10 окт 2015, 23:07

Да, всё работает:

Код: Выделить всё

evb-iMac:~ evb$ echo ܫܠܡܐ | egrep [ܒ-ܕ]
evb-iMac:~ evb$ echo ܫܠܡܐ | egrep [ܫ-ܬ]
ܫܠܡܐ
evb-iMac:~ evb$  
У меня здесь в коде не отображается графика, поэтому на всякий случай добавляю скриншот:
Screen Shot 2015-10-10 at 23.07.49.png

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 10 окт 2015, 23:11

evb0110 писал(а):Да, всё работает
Спасибо! Значит, с более новой egrep в этом отношении всё в порядке.
Talk is cheap. Show me the code.
Linus Torvalds

d_uragan
Сообщения: 505
Зарегистрирован: 23 ноя 2011, 21:27

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение d_uragan » 13 окт 2015, 11:47

попробуйте обновленный grep отсюда:

(32bit)
http://abf-downloads.rosalinux.ru/rosa2 ... n/release/

(64bit)
http://abf-downloads.rosalinux.ru/rosa2 ... n/release/

заработает?

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 13 окт 2015, 22:13

d_uragan писал(а):попробуйте обновленный grep ...
заработает?
Спасибо! Но почему-то нет:

Код: Выделить всё

$ echo 'ܫܠܡܐ' > peace
$ egrep '\<[ܐ-ܬ]' peace
grep: Неверный знак сортировки
$ egrep --version
grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете продавать и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.

Авторы программы — Майк Хертель (Mike Haertel) и другие, см. <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
$
Я смог опробовать только 32-битный вариант:

Код: Выделить всё

$ uname -a
Linux vostro 3.14.44-nrj-desktop-2rosa-i586 #1 SMP PREEMPT Thu Jun 11 15:04:26 UTC 2015 i686 i686 i686 GNU/Linux
$
Может ли дело быть в этом?

PS: То же с арабским, как и прежде, работает безупречно:

Код: Выделить всё

$ echo 'سلام' >> peace
$ egrep '\<[ا-ي]' peace
سلام
$
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 13 окт 2015, 22:29

Еще вот что любопытно:
20151013_222519.jpg
Арабский, хоть и задом-наперед (и буквы в несвязанном начертании), но отображается, а сирийский ­— квадратиками.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 13 окт 2015, 23:07

Впрочем, вряд ли это связано. Греческий в нормальной консоли (Ctrl+Alt+F2) тоже пишется квадратиками, но в эмуляторе с ним всё отлично, в т.ч. с пониманием egrep его интервалов:

Код: Выделить всё

$ echo 'Πάντα ῥεῖ' | egrep -i '\<[α-ω]'
Πάντα ῥεῖ
$
Получается, egrep почему-то не воспринимает последовательность именно сирийского алфавита. Причем, как мы видели выше, та же GNUшная grep на Маке сирийские интервалы понимает. Значит, дело в том, как прописана последовательность сирийского алфавита, в Линуксе и на Маке.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 13 окт 2015, 23:21

С другой стороны, awk сирийские интервалы прекрасно понимает, так что дело вроде бы в grep. Загадка!..
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 14 окт 2015, 05:12

В "нормальной" консоли у меня и русский квадратиками. Иногда.

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 14 окт 2015, 09:12

Код: Выделить всё

$ egrep '\<[ܬ-ܐ]'    ~/peace  
grep: Неверный знак сортировки

$ env LC_ALL=en_US egrep '\<[ܬ-ܐ]'    ~/peace  
ܫܠܡܐ

$ env LC_ALL=en_US.UTF-8 egrep '\<[ܬ-ܐ]'    ~/peace
grep: Неверный знак сортировки
Кстати, при копировании этого текста в Konsole, наблюдается проблемы при перемещении курсора и редактировании текста: латинские буквы появляются с запаздыванием на 1-2 символа (то есть в слове peace печатаю например 'c', а перед курсором показывает предыдущие символы).

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 14 окт 2015, 11:10

trs писал(а):проблемы при перемещении курсора и редактировании
Это из-за механизма Right-to-Left, управляющего сирийским набором.
Спасибо, что попробовали!
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 14 окт 2015, 11:14

trs писал(а):В "нормальной" консоли у меня и русский квадратиками. Иногда.
Какая-то недоюникоднотость местами.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 14 окт 2015, 16:46

Delles писал(а):
trs писал(а):проблемы при перемещении курсора и редактировании
Это из-за механизма Right-to-Left, управляющего сирийским набором.
Ну, с арабскими символами поведение иное. И в Kubuntu (live) подобной проблемы не наблюдаю.
Кстати, там awk выдаёт пустую строку. И вышеприведённый мною трюк с LC_ALL=en_US тоже.

Вообще, egrep-y достаточно LC_CTYPE=en_GB. Но это, скорее всего, не решение проблемы, и тут у меня возникает вопрос, а корректно ли работает awk.

По поводу ошибки. "Invalid collation character" (Неверный знак сортировки, REG_ECOLLATE) выдаёт не сам grep (src/regcomp.c в процессе сборки не учавствует), а что-то в глубинах re_compile_pattern() из glibc. на Mac-е свой C runtime (что использует MacPorts - не знаю) и возможно в этом и дело. Интересно, где это работает ещё.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 14 окт 2015, 23:05

trs писал(а):а корректно ли работает awk
Бóльшую часть того, что Вы написали, я не понял, т.к. не разбираюсь в предмете. Могу лишь ответить на тот Ваш вопрос, который процитировал выше. С моей т.зр. в части сирийских интервалов awk работает безупречно. Если ① задать интервал, в который не попадает ни одна из букв слова, результат будет выдан нулевой. Если же ② задать интервал от первой буквы до последней или ③ такой, в который попадает только одна буква слова, то в обоих случаях в выводе будет это слово/строка:

Код: Выделить всё

$ echo ܫܪܪܐ | awk /'[ܒ-ܩ]'/
$ echo ܫܪܪܐ | awk /'[ܐ-ܬ]'/
ܫܪܪܐ
$ echo ܫܪܪܐ | awk /'[ܐ-ܩ]'/
ܫܪܪܐ
$
Таким образом мои потребности для работы с текстом этим покрываются. А что касается egrep, то могу лишь пожелать, чтобы разбирающиеся в предмете вникли в то, что Вы написали (за что Вам большое спасибо!), если, конечно, до этого у кого-либо дело дойдет.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 14 окт 2015, 23:08

За предупреждение насчет пустой строки в Kubuntu тоже спасибо!
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 14 окт 2015, 23:32

Проблема здесь вот в чем: если описывать возможности работы с текстом для сирологов и арабистов, наподобие того, как это сделано здесь — http://stts.se/egrep_for_linguists/egre ... guists.pdf — то придется учитывать, что вот эта, вроде бы стандартная, вещь не работает в egrep, а эта — в awk на Kubuntu etc. Это создает некую неопределенность, так что дорабатывать системную юникодность всюду очень даже есть смысл. Хотя, конечно, всё то, что реализовано в этом смысле на Росе — это просто восторг!
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 15 окт 2015, 08:49

Проблема, как я и предполагал, оказалась с glibc:

Код: Выделить всё

~/src/grep-2.21 $ ./configure --with-included-regex
~/src/grep-2.21 $ make
~/src/grep-2.21 $ echo 'ܫܠܡܐ' > peace
~/src/grep-2.21 $ src/egrep '\<[ܐ-ܬ]' peace
ܫܠܡܐ
Каким-то чудом даже glibc-2.22/posix/regcomp.c более старой версии, чем в grep.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 15 окт 2015, 11:13

trs писал(а):Проблема, как я и предполагал, оказалась с glibc:

Код: Выделить всё

~/src/grep-2.21 $ ./configure --with-included-regex
~/src/grep-2.21 $ make
~/src/grep-2.21 $ echo 'ܫܠܡܐ' > peace
~/src/grep-2.21 $ src/egrep '\<[ܐ-ܬ]' peace
ܫܠܡܐ
Каким-то чудом даже glibc-2.22/posix/regcomp.c более старой версии, чем в grep.
Ура!! И что нужно сделать, чтобы было

Код: Выделить всё

egrep '\<[ܐ-ܬ]' peace
ܫܠܡܐ
?
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 15 окт 2015, 11:37

Я скачал исходники grep, распаковал их, перешел в полученный каталог. А далее то, что выше было: ./configure --with-included-regex и make (ну и проверка).
Собранный файл будет в подпапке src. Если всё нормально - можно записать новый grep поверх старого /bin/grep (egrep трогать не обязательно, это скрипт).

Или подождать, пока майнтайнеры пересоберут пакет с --with-included-regex. glibc в апстриме, вероятно, будут куда дольше исправлять, да и про баг они вряд ли в курсе.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 15 окт 2015, 12:01

Код: Выделить всё

$ echo ܫܠܡܐ | src/egrep [ܫ-ܬ]
ܫܠܡܐ
$ echo ܫܠܡܐ | src/egrep [ܒ-ܓ]
$
Счастье.
Огромное Вам спасибо!!!
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 15 окт 2015, 12:30

Копирование с заменой лучше не буду делать, т.к. по поводу нового grep'a говорится следующее:

Код: Выделить всё

grep: support for the -P option is not compiled into this --disable-perl-regexp binary
а для меня поддержка выражений Перла важна. Так что просто пропишу новый в alias. А когда скомпилируют (надеюсь!) обновление с поддержкой всех опций, то и обновлю.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 15 окт 2015, 13:26

Это я не предусмотрел, нужны заголовочные файлы PCRE - пакет libpcre-devel (если для 32х бит).
И заново сконфигурировать и пересобрать.

Еще бы кто подсказал, куда сообщать про эту проблему glibc. Я так понял, их багтреккер тут.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 15 окт 2015, 13:42

trs писал(а):сообщать про эту проблему glibc
Если Вам не трудно, зарегистрируйте этот баг, пожалуйста; я мало что понял в технике проблемы и могу описать непонятно.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 15 окт 2015, 14:16

Да я б уже написал туда, но думаю подождать, что скажут "деды" :)

А с Пёрлом то получилось? Просто у меня этой проблемы не наблюдалось, libpcre-devel установилось как зависимость для qt5-devel, по-видимому. Удалил — собирается без поддержки -P, установил — с поддержкой.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 15 окт 2015, 14:58

trs писал(а):Да я б уже написал туда, но думаю подождать, что скажут "деды" :)

А с Пёрлом то получилось? Просто у меня этой проблемы не наблюдалось, libpcre-devel установилось как зависимость для qt5-devel, по-видимому. Удалил — собирается без поддержки -P, установил — с поддержкой.
Я не стал пересобирать, подумав, что м.б. еще что-то окажется неучтенным. Оставил пока и предыдущий (он у меня в alias как gr) и новособранный (как grs). Запомнить — не ужасно, а у такого "раздвоения" есть и свои удобства.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 30 окт 2015, 06:49

Delles, как думаете, есть ли связь между задержкой ответа от разработчиков по существу найденного решения проблемы и произошедшей выше глубоконаучной попыткой классифицировать Сирьяз? :)

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 30 окт 2015, 12:06

trs писал(а):Delles, как думаете, есть ли связь между задержкой ответа от разработчиков по существу найденного решения проблемы и произошедшей выше глубоконаучной попыткой классифицировать Сирьяз? :)
Ничего не могу сказать. Но воспользуюсь тем, что Вы подняли эту ветку, чтобы сказать, что вчера вычитал в книжке по grep следующее:

«One important note, however: if pcre is compiled by hand, the --enable-unicode-properties configuration option must be used to compile in support for these options. Some libpcre packages (i.e., Fedora or Debian packages) have this built-in (especially internationally minded ones), but others do not. To check whether support is built-in to pcre, run the following (or something like it):

Код: Выделить всё

$ grep -P '\p{Cc}' /bin/ls
grep: support for \P, \p, and \X has not been compiled
That error message about support being compiled in has to do with pcre and not grep, which is not exactly intuitive. The solution is to either find a better package or compile your own with the correct options». (Источник)

Мне это интересно потому, что в режиме grep -P не работает маркер границы слова \b, что вообще-то весьма неудобно:

Код: Выделить всё

$ echo 'ܫܠܡܐ ܘܒܘܪ̈ܟܬܐ' | grep -P '\bܘ'
$
Видимо, это происходит потому, что сирийские буквы воспринимаются не вполне как буквы, подтверждением чему может служить вот такая глупость:

Код: Выделить всё

$ echo ܫܠܡܐ | grep '\w'
ܫܠܡܐ
$ echo ܫܠܡܐ | grep '[^\w]'
ܫܠܡܐ
$
Я не пробовал компилировать с упомянутыми опциями, т.к. можно обойтись маркированием начала слова так: (^| ) и конца слова так: ($| |[[:punct:]]) Но хотелось бы, конечно, чтобы grep полноценно работала с любым материалом.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 30 окт 2015, 12:24

С русским, кстати, такая же чепуха:

Код: Выделить всё

$ echo я | grep '\w'
я
$ echo я | grep '[^\w]'
я
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 30 окт 2015, 16:11

Спасибо, может как раз таких сообщений и не хватало. :)

У меня grep -P '\p{Cc}' процитированной ошибки не выдаёт. Либо работает, либо: недопустимая последовательность байтов UTF-8 во входных данных
По-видимому, опция --enable-unicode-properties задействована.

Проблема «в режиме grep -P не работает маркер границы слова \b» скорее всего не с ней связана, а может иметь родственные корни с предыдущей. По крайней мере, в исходниках pcre есть pcreposix.c, где в какой-то мере дублируется код из posix/regcomp.c библиотеки glibc. К сожалению, пока не знаю как правильно собрать grep с боле новой pcre для проверки, исправлено ли это там. В ChangeLog тоже не нашел.

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 30 окт 2015, 16:41

trs писал(а):Спасибо, может как раз таких сообщений и не хватало. :)
Похоже, что проблемы юникода в консольных программах — это вопрос из серии "чем дальше в лес, тем толще партизаны".
trs писал(а):У меня grep -P '\p{Cc}' процитированной ошибки не выдаёт.
У меня так:

Код: Выделить всё

$ grep -P '\p{Cc}' /bin/ls
Двоичный файл /bin/ls совпадает
$
(ранее написал, что зависает, это была моя ошибка)

М.б. то, что русские буквы grep признает и буквами \w и не-буквами [^\w], может служить подсказкой в какой-то мере? Ведь слово — это \w+ Отсюда и его границы. Если неоднозначность в том, что есть \w, то и с границами определиться невозможно.
Talk is cheap. Show me the code.
Linus Torvalds

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 30 окт 2015, 17:41

Кажется, понял. В обычном режиме grep распределяет русские символы на буквы и не-буквы по принципу \w буква и \W не-буква. Поэтому границу слова определяет. А в режиме -P русские буквы признаются однозначно не-буквами, поэтому и границы не определяются.
snapshot73.png
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 18 дек 2015, 12:29

Не дождавшись советов от дедов попробовал создать репорт

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 18 дек 2015, 12:49

trs писал(а):Не дождавшись советов от дедов попробовал создать репорт
Спасибо!!
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 19 дек 2015, 05:00

Вот это безценное пожелание весьма кстати! Ибо:
Carlos O'Donell писал(а):so if it's a collation issue, likely maybe, then it would be good to find a reproducer that shows via strlcoll the problem with Syriac characters. Until then an english speaking developer is going to have a hard time figuring this out, or the issue will go away once we start automating the collation data updates also (which should be our plan).
Неужели в стандарте не указана вся необходимая информация?
Так что в переводе с дипломатичного на русский: ложил я болт на это дело.
Карлос! Прошу заметить, Карл из компании "Red Hat"!

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

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 19 дек 2015, 11:48

Дикие Франки!.. Вот и файль баги (про сирийский) после этого.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 20 дек 2015, 06:44

Да был уж Карл во фракийском колпаке со своим: «спасение утопающих — дело рук самих утопающих»

Я в самом деле в затруднительном положении. Кто тонет то? :) Глянул: файл в Grep содержит исправления, значит были на то причины? Вникать в детали не стал, хватило того, что язык в его устаревшем аналоге в glibc не ISO/ANSI C, а K&R C, то есть до 80х годов прошлого века! Может они и правы, и ошибка "likely maybe" в другом месте, localedata. Но в этом тогда что? Почему его не привели в соответствие стандарту, как в Grep? Хотя окружение настроил, могу сам попробовать скопировать обновлённый файл и собрать Glibc, а следом и Grep. Но. Допустим, оно заработает. Что с этим делать? Это мне позволено ошибаться, а они там такие умные и готовятся к X-mas, как же терять лицо...

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 20 дек 2015, 11:57

Я так понял его слова, что он не понимает, когда какой вывод должен быть у grep в том или ином случае, т.к. не знает порядка сирийских букв. Ему предоставлен только один пример. Дело это, конечно, ерундовое (не самый ли маленький это алфавит из включенных в юникод?), но то, что он написал strcoll с опечаткой, наводит на мысль, что таки-да, похоже на "отстаньте со своим...". Можно и впрямь отстать. Для ищущих решение Вами найдено и опубликовано здесь.
Talk is cheap. Show me the code.
Linus Torvalds

trs
Сообщения: 1939
Зарегистрирован: 07 сен 2015, 16:08
Operating system: -

Re: [РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение trs » 20 дек 2015, 14:23

Он сам же указал, что данные можно создать автоматически: "the issue will go away once we start automating the collation data updates also (which should be our plan)". Да и воспроизводящие проблему данные - предоставлены. Разве он написал, что нужно ещё? Можно в отладчике запустить grep и поставить точку останова на функцию strcoll. Но он хочет, что бы без grep, то есть локализовали место ошибки. Я именно это и попробовал, но их не устраивает. Значит пусть ждут, есть повод вспоминать сирийский и С (который то ли си, то ли до). Но дела вроде в конце Гада не начинают :)

keleg
Сообщения: 5387
Зарегистрирован: 15 сен 2011, 01:58

Re: [РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение keleg » 25 фев 2016, 09:41

Что нужно сделать для исправления этой проблемы в Росе?
Достаточно обновить awk как написано в http://bugs.rosalinux.ru/show_bug.cgi?id=6357 ?

Аватара пользователя
Delles
Сообщения: 1785
Зарегистрирован: 18 авг 2015, 19:52
Operating system: GNU/Linux : ROSA Desktop Fresh R7 (x86_64). Не обновлял.

Re: [РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском

Сообщение Delles » 25 фев 2016, 12:53

keleg писал(а):Что нужно сделать для исправления этой проблемы в Росе?
Достаточно обновить awk как написано в http://bugs.rosalinux.ru/show_bug.cgi?id=6357 ?
Простое обновление (g)awk решает проблему неузнавания (g)awk’ом маркера конца слова — \> — в том числе в кириллице, как я написал в примере на багзилле.

А сирийские диапазоны (или как я их не вполне правильно назвал в теме, интервалы) grep начинает понимать, если его перекомпилировать с отвязкой от glibc, т.е. установить (=убедиться, что установлен) пакет libpcre-devel (обеспечение поддержки выражений Perl’a), затем войти в папку с исходниками и:

Код: Выделить всё

~/src/grep-2.21 $ ./configure --with-included-regex
~/src/grep-2.21 $ make
Пояснение trs, выявившего этот баг и предложившего решение, см. здесь.
Talk is cheap. Show me the code.
Linus Torvalds

Ответить