Страница 1 из 1
[РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 17:43
Delles
Код: Выделить всё
$ echo 'ܫܠܡܐ' > peace
$ egrep '\<[ܐ-ܬ]' peace
grep: Неверный знак сортировки
$ awk /'\<[ܐ-ܬ]'/ peace
ܫܠܡܐ
$
Я посмотрел на сайте GNU, вроде бы там есть версия grep поновее, чем в Росе. Мне самому, в принципе, достаточно и awk'a, но, вообще говоря, если есть более новая grep, то почему бы ей не быть в Росе?..
PS: в арабском egrep интервалы понимает.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 17:44
keleg
Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 17:52
Barmalei
keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Арабский язык, но у него несколько диалектов.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 17:57
Delles
keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Стыдно сказать, но я поленился до 41 обновиться. А вообще у Огнелиса с письменностями всё очень хорошо (сужу по колонке языков в Википедии и, особенно, по сайту с переводами песен Высоцкого — последний словно создан для тестирования восприимчивости браузера к письменностям). Хромиуму приходилось кое-какие нужные мне шрифты доустанавливать, а Огнелис — всегда готов.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 18:00
Delles
Barmalei писал(а):Арабский язык, но у него несколько диалектов.
Сирийский — это не арабский. Это язык арамейской группы со своими разновидностями письма.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 18:05
Barmalei
Delles писал(а):Barmalei писал(а):Арабский язык, но у него несколько диалектов.
Сирийский — это не арабский. Это язык арамейской группы со своими разновидностями письма.
А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 18:16
Delles
Barmalei писал(а):А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.
Совсем-совсем не арабский, и не аравийский. Посмотрите в Википедии статьи "Сирийский язык" и "Сирийское письмо".
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 18:19
Barmalei
Delles писал(а):Barmalei писал(а):А какой же? Везде пишут арабский. Арамейскую первый раз слышу. Аравийская может быть.
Совсем-совсем не арабский, и не аравийский. Посмотрите в Википедии статьи "Сирийский язык" и "Сирийское письмо".
Мы наверное в разных Википедиях сидим.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 18:24
Delles
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 18:27
keleg
Delles писал(а):keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Стыдно сказать, но я поленился до 41 обновиться. А вообще у Огнелиса с письменностями всё очень хорошо (сужу по колонке языков в Википедии и, особенно, по сайту с переводами песен Высоцкого — последний словно создан для тестирования восприимчивости браузера к письменностям). Хромиуму приходилось кое-какие нужные мне шрифты доустанавливать, а Огнелис — всегда готов.
А скажите шрифты? Добавим.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 19:12
Delles
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 —
Что касается арабского, то пока что из мной опробованных безупречно работает в LO только Times New Roman, остальные мне известные делают ошибки при растягивании строк. Но в ближайшем будущем, возможно, положение изменится в лучшую сторону благодаря объявленному Ubuntu развитию арабской реализации —
https://www.surveymonkey.com/r/ubuntuarabicfonttesting
Тот шрифт, который они планируют как собственно убунтовский (для интерфейса), конечно, несерьёзен, но есть надежда, что на этой волне появятся хорошие арабские шрифты, нужно следить за проектом.
Спасибо!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 09 окт 2015, 21:01
Delles
keleg писал(а):Кстати о. 41 огнелис должен уже понимать сирийские... как их там? В общем я проверял - вроде работает.
Ура! Теперь и ранее не работавшие лигатуры (ComposeKey) работают.
Спасибо!!!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 05:22
keleg
во-во, правильное слово, лигатуры

Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 09:28
trs
Прошу прощения за поддержку оффтопа, но спор похоже возник на ровном месте.
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.
Видно, что результат зависит (как минимум) от способа классификации, а так же от языка Википедии.
Так что я бы воздержался от категоричных отрицаний.
Так можно дойти и до вопроса : на каком языка написан Линух, на С, или на английском…

Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 12:59
Delles
trs писал(а):Semitic_languages
Among them are the Ugaritic, Phoenician, Aramaic, Hebrew, Syriac, Arabic, and South Arabian alphabets.
Понятно, что и сирийский, и арабский — семитские. Но утверждать на этом основании, что сирийский — это арабский, столь же нелепо, как утверждать, что еврейский — это арабский, оба ведь тоже семитские. Сирийский — это не арабский, речь была только об этом.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 14:55
trs
Delles, мы с Вами тоже говорим на разных языках, хотя формально он один. На "этом" основании подобных утверждений не было. Мой пост вообще был о том, что вместо "совсем-совсем не" корректней было бы написать "принято относить к…", что бы избежать малоинформативного спора.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 15:57
Delles
trs писал(а):Delles, мы с Вами тоже говорим на разных языках, хотя формально он один. На "этом" основании подобных утверждений не было. Мой пост вообще был о том, что вместо "совсем-совсем не" корректней было бы написать "принято относить к…", что бы избежать малоинформативного спора.
Как минимум грамматически у нас с Вами язык один, лексически — в общем тоже, письменность одна и та же. А у сирийского с арабским разные грамматики, разная лексика, разные письменности. Ни один араб никогда не признает, что
сурйāнӣ — это его язык. Если Вам больше нравится "принято относить", я не возражаю. Я возражаю только против утверждения, что сирийский — это арабский. Так же возражал бы, если бы кто-то сказал, что болгарский — это русский (оба славянские). За оффтоп, конечно, прошу прощения у сообщества, но сирийским и арабским я занимаюсь уже 20 лет, поэтому неточности такого уровня хочется устранить.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 15:59
keleg
ну, это уж явный оффтопик, завязывайте

Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 22:46
evb0110
Возможно, кому-то пригодится — надеюсь, не офтоп.
Сегодня решал проблему неюникодного же 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$
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 22:51
Delles
evb0110 писал(а):Код: Выделить всё
evb-iMac:~ evb$ echo ГОЛОВА | grep [Г-Д]
ГОЛОВА
А не проверите, понимает ли egrep сирийский интервал по ܫܠܡܐ ; например, [ܫ-ܬ] ?
Если работает, то точно нужно egrep обновлять.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 23:07
evb0110
Да, всё работает:
Код: Выделить всё
evb-iMac:~ evb$ echo ܫܠܡܐ | egrep [ܒ-ܕ]
evb-iMac:~ evb$ echo ܫܠܡܐ | egrep [ܫ-ܬ]
ܫܠܡܐ
evb-iMac:~ evb$
У меня здесь в коде не отображается графика, поэтому на всякий случай добавляю скриншот:
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 10 окт 2015, 23:11
Delles
evb0110 писал(а):Да, всё работает
Спасибо! Значит, с более новой egrep в этом отношении всё в порядке.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 13 окт 2015, 11:47
d_uragan
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 13 окт 2015, 22:13
Delles
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
سلام
$
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 13 окт 2015, 22:29
Delles
Еще вот что любопытно:
Арабский, хоть и задом-наперед (и буквы в несвязанном начертании), но отображается, а сирийский — квадратиками.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 13 окт 2015, 23:07
Delles
Впрочем, вряд ли это связано. Греческий в нормальной консоли (Ctrl+Alt+F2) тоже пишется квадратиками, но в эмуляторе с ним всё отлично, в т.ч. с пониманием egrep его интервалов:
Код: Выделить всё
$ echo 'Πάντα ῥεῖ' | egrep -i '\<[α-ω]'
Πάντα ῥεῖ
$
Получается, egrep почему-то не воспринимает последовательность именно сирийского алфавита. Причем, как мы видели выше, та же GNUшная grep на Маке сирийские интервалы понимает. Значит, дело в том, как прописана последовательность сирийского алфавита, в Линуксе и на Маке.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 13 окт 2015, 23:21
Delles
С другой стороны, awk сирийские интервалы прекрасно понимает, так что дело вроде бы в grep. Загадка!..
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 05:12
trs
В "нормальной" консоли у меня и русский квадратиками. Иногда.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 09:12
trs
Код: Выделить всё
$ 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', а перед курсором показывает предыдущие символы).
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 11:10
Delles
trs писал(а):проблемы при перемещении курсора и редактировании
Это из-за механизма Right-to-Left, управляющего сирийским набором.
Спасибо, что попробовали!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 11:14
Delles
trs писал(а):В "нормальной" консоли у меня и русский квадратиками. Иногда.
Какая-то недоюникоднотость местами.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 16:46
trs
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 - не знаю) и возможно в этом и дело. Интересно, где это работает ещё.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 23:05
Delles
trs писал(а):а корректно ли работает awk
Бóльшую часть того, что Вы написали, я не понял, т.к. не разбираюсь в предмете. Могу лишь ответить на тот Ваш вопрос, который процитировал выше. С моей т.зр. в части сирийских интервалов awk работает безупречно. Если ① задать интервал, в который не попадает ни одна из букв слова, результат будет выдан нулевой. Если же ② задать интервал от первой буквы до последней или ③ такой, в который попадает только одна буква слова, то в обоих случаях в выводе будет это слово/строка:
Код: Выделить всё
$ echo ܫܪܪܐ | awk /'[ܒ-ܩ]'/
$ echo ܫܪܪܐ | awk /'[ܐ-ܬ]'/
ܫܪܪܐ
$ echo ܫܪܪܐ | awk /'[ܐ-ܩ]'/
ܫܪܪܐ
$
Таким образом мои потребности для работы с текстом этим покрываются. А что касается egrep, то могу лишь пожелать, чтобы разбирающиеся в предмете вникли в то, что Вы написали (за что Вам большое спасибо!), если, конечно, до этого у кого-либо дело дойдет.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 23:08
Delles
За предупреждение насчет пустой строки в Kubuntu тоже спасибо!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 14 окт 2015, 23:32
Delles
Проблема здесь вот в чем: если описывать возможности работы с текстом для сирологов и арабистов, наподобие того, как это сделано здесь —
http://stts.se/egrep_for_linguists/egre ... guists.pdf — то придется учитывать, что вот эта, вроде бы стандартная, вещь не работает в egrep, а эта — в awk на Kubuntu etc. Это создает некую неопределенность, так что дорабатывать системную юникодность всюду очень даже есть смысл. Хотя, конечно, всё то, что реализовано в этом смысле на Росе — это просто восторг!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 08:49
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.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 11:13
Delles
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.
Ура!! И что нужно сделать, чтобы было
?
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 11:37
trs
Я скачал
исходники grep, распаковал их, перешел в полученный каталог. А далее то, что выше было:
./configure --with-included-regex и
make (ну и проверка).
Собранный файл будет в подпапке src. Если всё нормально - можно записать новый grep поверх старого /bin/grep (egrep трогать не обязательно, это скрипт).
Или подождать, пока майнтайнеры пересоберут пакет с --with-included-regex. glibc в апстриме, вероятно, будут куда дольше исправлять, да и про баг они вряд ли в курсе.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 12:01
Delles
Код: Выделить всё
$ echo ܫܠܡܐ | src/egrep [ܫ-ܬ]
ܫܠܡܐ
$ echo ܫܠܡܐ | src/egrep [ܒ-ܓ]
$
Счастье.
Огромное Вам спасибо!!!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 12:30
Delles
Копирование с заменой лучше не буду делать, т.к. по поводу нового grep'a говорится следующее:
Код: Выделить всё
grep: support for the -P option is not compiled into this --disable-perl-regexp binary
а для меня поддержка выражений Перла важна. Так что просто пропишу новый в alias. А когда скомпилируют (надеюсь!) обновление с поддержкой всех опций, то и обновлю.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 13:26
trs
Это я не предусмотрел, нужны заголовочные файлы PCRE - пакет
libpcre-devel (если для 32х бит).
И заново сконфигурировать и пересобрать.
Еще бы кто подсказал, куда сообщать про эту проблему glibc. Я так понял, их багтреккер
тут.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 13:42
Delles
trs писал(а):сообщать про эту проблему glibc
Если Вам не трудно, зарегистрируйте этот баг, пожалуйста; я мало что понял в технике проблемы и могу описать непонятно.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 14:16
trs
Да я б уже написал туда, но думаю подождать, что скажут "деды"
А с Пёрлом то получилось? Просто у меня этой проблемы не наблюдалось, libpcre-devel установилось как зависимость для qt5-devel, по-видимому. Удалил — собирается без поддержки -P, установил — с поддержкой.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 15 окт 2015, 14:58
Delles
trs писал(а):Да я б уже написал туда, но думаю подождать, что скажут "деды"
А с Пёрлом то получилось? Просто у меня этой проблемы не наблюдалось, libpcre-devel установилось как зависимость для qt5-devel, по-видимому. Удалил — собирается без поддержки -P, установил — с поддержкой.
Я не стал пересобирать, подумав, что м.б. еще что-то окажется неучтенным. Оставил пока и предыдущий (он у меня в alias как gr) и новособранный (как grs). Запомнить — не ужасно, а у такого "раздвоения" есть и свои удобства.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 30 окт 2015, 06:49
trs
Delles, как думаете, есть ли связь между задержкой ответа от разработчиков по существу найденного решения проблемы и произошедшей выше глубоконаучной попыткой классифицировать Сирьяз?

Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 30 окт 2015, 12:06
Delles
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 '\w'
ܫܠܡܐ
$ echo ܫܠܡܐ | grep '[^\w]'
ܫܠܡܐ
$
Я не пробовал компилировать с упомянутыми опциями, т.к. можно обойтись маркированием начала слова так:
(^| ) и конца слова так:
($| |[[:punct:]]) Но хотелось бы, конечно, чтобы grep полноценно работала с любым материалом.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 30 окт 2015, 12:24
Delles
С русским, кстати, такая же чепуха:
Код: Выделить всё
$ echo я | grep '\w'
я
$ echo я | grep '[^\w]'
я
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 30 окт 2015, 16:11
trs
Спасибо, может как раз таких сообщений и не хватало.
У меня
grep -P '\p{Cc}' процитированной ошибки не выдаёт. Либо работает, либо: недопустимая последовательность байтов UTF-8 во входных данных
По-видимому, опция
--enable-unicode-properties задействована.
Проблема «в режиме grep -P не работает маркер границы слова \b» скорее всего не с ней связана, а может иметь родственные корни с предыдущей. По крайней мере, в исходниках pcre есть pcreposix.c, где в какой-то мере дублируется код из posix/regcomp.c библиотеки glibc. К сожалению, пока не знаю как правильно собрать grep с боле новой pcre для проверки, исправлено ли это там. В
ChangeLog тоже не нашел.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 30 окт 2015, 16:41
Delles
trs писал(а):Спасибо, может как раз таких сообщений и не хватало.

Похоже, что проблемы юникода в консольных программах — это вопрос из серии "чем дальше в лес, тем толще партизаны".
trs писал(а):У меня grep -P '\p{Cc}' процитированной ошибки не выдаёт.
У меня так:
Код: Выделить всё
$ grep -P '\p{Cc}' /bin/ls
Двоичный файл /bin/ls совпадает
$
(ранее написал, что зависает, это была моя ошибка)
М.б. то, что русские буквы grep признает и буквами
\w и не-буквами
[^\w], может служить подсказкой в какой-то мере? Ведь
слово — это
\w+ Отсюда и его границы. Если неоднозначность в том, что есть
\w, то и с границами определиться невозможно.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 30 окт 2015, 17:41
Delles
Кажется, понял. В обычном режиме grep распределяет русские символы на буквы и не-буквы по принципу
\w буква и
\W не-буква. Поэтому границу слова определяет. А в режиме
-P русские буквы признаются однозначно не-буквами, поэтому и границы не определяются.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 18 дек 2015, 12:29
trs
Не дождавшись советов от дедов попробовал создать
репорт
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 18 дек 2015, 12:49
Delles
trs писал(а):Не дождавшись советов от дедов попробовал создать
репорт
Спасибо!!
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 19 дек 2015, 05:00
trs
Вот это безценное пожелание весьма кстати! Ибо:
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"!
К сожалению, не удалось мне до них донести мысль, что как раз у пользователя проблема решена, хоть и костылём. Ну подождём немного, утро вечера мудренее...
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 19 дек 2015, 11:48
Delles
Дикие Франки!.. Вот и файль баги (про сирийский) после этого.
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 20 дек 2015, 06:44
trs
Да был уж Карл во фракийском колпаке со своим: «спасение утопающих — дело рук самих утопающих»
Я в самом деле в затруднительном положении. Кто тонет то?

Глянул: файл в Grep содержит исправления, значит были на то причины? Вникать в детали не стал, хватило того, что язык в его устаревшем аналоге в glibc не ISO/ANSI C, а K&R C, то есть до 80х годов прошлого века! Может они и правы, и ошибка "likely maybe" в другом месте, localedata. Но в этом тогда что? Почему его не привели в соответствие стандарту, как в Grep? Хотя окружение настроил, могу сам попробовать скопировать обновлённый файл и собрать Glibc, а следом и Grep. Но. Допустим, оно заработает. Что с этим делать? Это мне позволено ошибаться, а они там такие умные и готовятся к X-mas, как же терять лицо...
Re: egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 20 дек 2015, 11:57
Delles
Я так понял его слова, что он не понимает, когда какой вывод должен быть у grep в том или ином случае, т.к. не знает порядка сирийских букв. Ему предоставлен только один пример. Дело это, конечно, ерундовое (не самый ли маленький это алфавит из включенных в юникод?), но то, что он написал strcoll с опечаткой, наводит на мысль, что таки-да, похоже на "отстаньте со своим...". Можно и впрямь отстать. Для ищущих решение Вами найдено и опубликовано здесь.
Re: [РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 20 дек 2015, 14:23
trs
Он сам же указал, что данные можно создать автоматически: "the issue will go away once we start automating the collation data updates also (which should be our plan)". Да и воспроизводящие проблему данные - предоставлены. Разве он написал, что нужно ещё? Можно в отладчике запустить grep и поставить точку останова на функцию strcoll. Но он хочет, что бы без grep, то есть локализовали место ошибки. Я именно это и попробовал, но их не устраивает. Значит пусть ждут, есть повод вспоминать сирийский и С (который то ли
си, то ли
до). Но дела вроде в конце Гада не начинают

Re: [РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 25 фев 2016, 09:41
keleg
Что нужно сделать для исправления этой проблемы в Росе?
Достаточно обновить awk как написано в
http://bugs.rosalinux.ru/show_bug.cgi?id=6357 ?
Re: [РЕШЕНО] egrep (в отличие от awk) не понимает интервалов в сирийском
Добавлено: 25 фев 2016, 12:53
Delles
Простое обновление
(g)awk решает проблему неузнавания
(g)awk’ом маркера конца слова —
\> — в том числе в кириллице, как я написал в примере на багзилле.
А сирийские диапазоны (или как я их не вполне правильно назвал в теме,
интервалы)
grep начинает понимать, если его перекомпилировать с отвязкой от
glibc, т.е. установить (=убедиться, что установлен) пакет
libpcre-devel (обеспечение поддержки выражений Perl’a), затем войти в папку с исходниками и:
Код: Выделить всё
~/src/grep-2.21 $ ./configure --with-included-regex
~/src/grep-2.21 $ make
Пояснение
trs, выявившего этот баг и предложившего решение, см.
здесь.