Выбрать текст меджду символами

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

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

sedikpoll
Сообщения: 100

Выбрать текст меджду символами

Сообщение sedikpoll »

Есть множество ссылок подобного вида:

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

http://site.ru/index.php?option=1&parent=1&id=1
http://site.ru/index.php?av=1&yes=1&and=1


Как из них можно достать:

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

option
parent
id
yes
and


Понимаю что надо выбирать из ссылок все что после ?|& и что бы это заканчивалось на =
Каким образом это можно осуществить более рационально?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Выбрать текст меджду символами

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

sedikpoll писал(а):
04.12.2010 21:08
Понимаю что надо выбирать из ссылок все что после ?|& и что бы это заканчивалось на =
Каким образом это можно осуществить более рационально?

Это и есть самый рациональный способ. Более рационального нет.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Выбрать текст меджду символами

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

Личное сообщение

Если вам критично именно на grep'е, то так:
grep -o '[?&][^?&=]\+=' | grep -o '[^?&=]\+'

На sed'е можно обойтись одной командой вместо двух.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Выбрать текст меджду символами

Сообщение drBatty »

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

doc@dt:~/tests$ cat ttt.txt
http://site.ru/index.php?option=1&parent=1&id=1
http://site.ru/index.php?av=1&yes=1&and=1
doc@dt:~/tests$ sed -r 's/[?&]([^=]+)=/<\1>/g;s/^[^<]*<//;s/(.*)>.*/\1/;s/>[^<]*</\n/g' ttt.txt
option
parent
id
av
yes
and
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

Re: Выбрать текст меджду символами

Сообщение drBatty »

а вот принципиально иной вариант с циклом

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

doc@dt:~/tests$ sed -r ':l;s/^(([^\n]*\n)*)[^?&]*[?&]([^=]*)=[^?&]*/\1\3\n/;tl;s/\n$//' ttt.txt
option
parent
id
av
yes
and


ЗЫЖ хотя вариант с двумя командами (от /dev/random ) ИМХО лучше. (:
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Выбрать текст меджду символами

Сообщение sash-kan »

drBatty
а так не проще?

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

sed 's/.*?//;s/=[^&]*&\?/\n/g;s/\n$//'
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: