На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
sedikpoll
Сообщения: 100
Сообщение
sedikpoll » 04.12.2010 21:08
Есть множество ссылок подобного вида:
Код: Выделить всё
http://site.ru/index.php?option=1&parent=1&id=1
http://site.ru/index.php?av=1&yes=1&and=1
Как из них можно достать:
Понимаю что надо выбирать из ссылок все что после ?|& и что бы это заканчивалось на =
Каким образом это можно осуществить более рационально?
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo
Сообщение
/dev/random » 04.12.2010 21:13
sedikpoll писал(а): ↑ 04.12.2010 21:08
Понимаю что надо выбирать из ссылок все что после ?|& и что бы это заканчивалось на =
Каким образом это можно осуществить более рационально?
Это и есть самый рациональный способ. Более рационального нет.
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo
Сообщение
/dev/random » 04.12.2010 21:28
Личное сообщение
Если вам критично именно на grep'е, то так:
grep -o '[?&][^?&=]\+=' | grep -o '[^?&=]\+'
На sed'е можно обойтись одной командой вместо двух.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 04.12.2010 22:12
Код: Выделить всё
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
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 04.12.2010 22:26
а вот принципиально иной вариант с циклом
Код: Выделить всё
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 ) ИМХО лучше. (:
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 05.12.2010 04:31