grep позиционные проверки

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
jojahti
Сообщения: 310

grep позиционные проверки

Сообщение jojahti »

Как их сделать?
Положим у меня есть текст:
"(ключевое слово) нужный мне текст."
Как мне группу(атом) с ключевым словом сделать условием, не входящим в итоговое совпадение?

P.S. Вообще какая терминология нормальная? А то позитивные проверки, заглядывания, подглядывания, и в итоге непонятно даже, что в гугл вбивать.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: grep позиционные проверки

Сообщение drBatty »

вы можете русским языком написать, что вам надо? желательно с примерами.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
jojahti
Сообщения: 310

Re: grep позиционные проверки

Сообщение jojahti »

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


К примеру, что-бы команда:
команда | grep -o "регексп"
возвращала "ВС" только в тех случаях, когда оно следует после "A".
"DBC" "HBC" - не подойдут
"ABC" "ABCD" подойдут.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: grep позиционные проверки

Сообщение /dev/random »

jojahti писал(а):
26.02.2011 13:06
К примеру, что-бы команда:
команда | grep -o "регексп"
возвращала "ВС" только в тех случаях, когда оно следует после "A".
"DBC" "HBC" - не подойдут
"ABC" "ABCD" подойдут.

grep -oP '(?<=A)BC'
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: grep позиционные проверки

Сообщение drBatty »

Утверждения

Утверждения - это проверки касательно символов, идущих до или после текущей позиции сопоставления, ничего при этом не поглощая (никакие символы исходного текста не ставятся в соответствие утверждениям). Наиболее простые варианты утверждений, такие как \b, \B, \A, \Z, \z, ^ и $ были рассмотрены ранее. Более сложные утверждения записываются как подмаски. Утверждения бывают двух видов: те, которые анализируют текст, предшествующий текущей позиции, и идущий после нее.

Сопоставление подмаски, содержащий утверждение, происходит обычным образом, за исключением того, что текущая позиция не изменяется. Утверждения касательно последующего текста начинаются с (?= для положительных утверждений и с (?! для отрицающих утверждений. Например, \w+(?=;) совпадает со словом, за которым следует символ ';', но при этом сама точка с запятой в совпадение не включается. А foo(?!bar) соответствует любому появлению "foo", после которого не идёт "bar". Заметим, что похожий шаблон (?!foo)bar не будет искать вхождение "bar", которому предшествует любая строка за исключением "foo". Но, тем не менее, он будет соответствовать любым вхождениям подстроки "bar", поскольку условие (?!foo) всегда TRUE, если следующие три символа - "bar". Для получения желаемого результата необходимо воспользоваться второй категорией утверждений.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
jojahti
Сообщения: 310

Re: grep позиционные проверки

Сообщение jojahti »

/dev/random
Во, спасибо!!
Вот только grep жалуется, что ретроспективное утверждение имеет неконечную длину. Это можно обойти?

Вот собако, и в руби тоже низя делать эти "look behind" произвольной длины. (
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: grep позиционные проверки

Сообщение liaonau »

jojahti писал(а):
26.02.2011 13:48
/dev/random
Во, спасибо!!
Вот только grep жалуется, что ретроспективное утверждение имеет неконечную длину. Это можно обойти?

Вот собако, и в руби тоже низя делать эти "look behind" произвольной длины. (

Забавно, вновь о том же, о заглядывании ☺.
В регулярных выражениях perl — нельзя обойти, если -P в grep полностью соответствует perl5, то — нет.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: grep позиционные проверки

Сообщение drBatty »

liaonau писал(а):
26.02.2011 14:02
В регулярных выражениях perl — нельзя обойти, если -P в grep полностью соответствует perl5, то — нет.

можно вообще обойтись без заглядования. только для этого grep мало, нао sed|perl|etc...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: