LINUX.ORG.RU

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

УМВР

$ echo "jgfdk k gkjfkh khgfj плорпалаор ggfjfjhgрпа hgf jhgfj" | grep -Eio "[а-я]+"
плорпалаор
рпа

$ grep -V
grep (GNU grep) 2.20
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>.

$

Allakka ★★★★
()

На самом деле я хотел бы отпарсить html код

<a>Зарегистрироваться</a>

<p>Нужно <b>распарсить</b> код</p>

<button value=«Отправить»></button>

Должно получится что-то типо:

Зарегистрироваться

Нужно распарсить код

Отправить

amankov
() автор топика

Вывести все слова, содержащиеся в файлах директории, которые содержат хоть одну букву, используемую в русском языке:

grep -roP '\p{L}*[А-яЁё]\p{L}*' .
У меня на первом же бинарном файле проиходит segmentation fault.

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

grep -roP '[А-яЁё]+' .
Так у меня всё работает.

Вывести все символы, которые в Юникоде считаются кириллицей, содержащиеся в файлах: надо расчехлять Perl, а лучше Python, потому что grep -P ещё не поддерживает нужные фичи.

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

У r3lgar, наверное, английская локаль. Я полагаю, что нужно использовать -P, чтобы сортировать по Юникоду. И я бы написал не [а-я], а [А-яЁё].

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

У меня действительно en_US.UTF-8 везде. Я никогда не задумывался, что для грепа это играет какую-то роль. Но и с парсингом кириллицы я, честно говоря, сталкиваюсь впервые.

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

в юникоде тебя ждёт много забавного

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

grep -roP '\p{L}*[А-яЁё]\p{L}*' .
segmentation fault

у меня на хоияке и /usr нет; естественно завершения не дожидался, GNU grep 2.21

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

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

grep определяет, что входит в выражения типа [а-я], по порядку сортировки символов в локали (см. info grep 'Regular Expressions' 'Character Classes and Bracket Expressions'). Локаль en_US не задаёт порядка для русских букв, вот он и ругается. А при флаге -P, я так понимаю, выражения скармливаются PCRE как есть.

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

Хм. Выходит, что grep по дефолту просто клал на б-жественный юникод? Это всё происки Eddy_Em!

Если без шуток, то я банально пренедрёг «info grep» и читал его по-диагонали.

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

grep по дефолту просто клал на б-жественный юникод?

А Юникод в общем-то не определяет порядок сортировки символов. Это зависит от конкретного языка, а для grep'а вообще нет понятия языка. Это нам так повезло, что у нас весь диапазон от «А» до «я» идёт последовательно (кроме «ё»), а в других языках не так.

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

А Юникод в общем-то не определяет порядок сортировки символов.

Кофе навеяло: как-то можно скармливать всяким парсерам текста вместо букв/символов их код юникода или диапазон кодов? Было бы интересно пковырять такое под веществами.

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

как-то можно скармливать всяким парсерам текста вместо букв/символов их код юникода или диапазон кодов?

В каком смысле? Конечно, можно.

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

У меня не получилось.

Ну в Перле, например, есть \N{LATIN CAPITAL LETTER V} или \N{U+56}. В Python есть синтаксис \N{название}, \u0056 и \U00000056 в строковых литералах.

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

Перл и питон — это уже совсем другая история. Слишком накладно для разового использования.

r3lgar ★★★★★
()
echo "Привет! Hello! Шаломчег..." | sed 's/[^а-яА-Я ]//g'
Привет  Шаломчег
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от amankov
cat | sed 's/[^а-яА-Я ]//g'
<a>Зарегистрироваться</a>
<p>Нужно <b>распарсить</b> код</p>
<button value=<<Отправить>>></button>

Зарегистрироваться
Нужно распарсить код
 Отправить
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от r3lgar
echo "Привет! Hello! Шаломчег..." | grep -Eio '[а-я]+'   
Привет
Шаломчег

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