perl: регулярные выражения: взять путь

Модератор: Модераторы разделов

Аватара пользователя
agbr
Сообщения: 486
ОС: openSUSE 10.2

perl: регулярные выражения: взять путь

Сообщение agbr »

есть переменная содержащая типа /blah/blah/blah/blah/file.ext, надо из неё сделать просто /blah/blah/blah/blah, но как можно короче, и не создавая дополнительных переменных

вопрос конечно глупый, но сам жудко туплю
jabber: agbr@jabber.ru

против проприетарного ПО в GNU/Linux
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: perl: регулярные выражения: взять путь

Сообщение v04bvs »

$str =~ s/\/[^\/]*$//;
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: perl: регулярные выражения: взять путь

Сообщение t.t »

Лучше s|/[^/]*$|| -- чисто с точки зрения читабельности.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: perl: регулярные выражения: взять путь

Сообщение Zeus »

Умиляет меня этот язык :)

s|/[^/]*$||
более читабельно, чем
$str =~ s/\/[^\/]*$//;

:lol:
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: perl: регулярные выражения: взять путь

Сообщение Jan2ary »

Насколько я знаю язык, и насколько я понял t.t, имелось в виду, что пайпы легче выделяются из обилия слешей, чем сами слеши, поэтому слеши команды s были заменени на пайпы, а экранировать слеши пути больше не надо.

$str =~ s|/[^/]*$||;
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: perl: регулярные выражения: взять путь

Сообщение Zeus »

Да я просто про сам язык говорю :)
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: perl: регулярные выражения: взять путь

Сообщение t.t »

(Jan2ary @ May 31 2006, в 10:02) писал(а):Насколько я знаю язык, и насколько я понял t.t, имелось в виду, что пайпы легче выделяются из обилия слешей, чем сами слеши, поэтому слеши команды s были заменени на пайпы, а экранировать слеши пути больше не надо.

$str =~ s|/[^/]*$||;
Весьма правильно понял. Вообще, насколько я помню, символы-разделители в выражении s/// могут быть вообще чуть ли не любыми; соответственно лучше использовать такие символы, которых нет в искомой строке, именно чтобы избежать излишних экранировок.

(Zeus @ May 31 2006, в 09:00) писал(а):Умиляет меня этот язык
s|/[^/]*$||
более читабельно, чем
$str =~ s/\/[^\/]*$//;
А вы почитайте чего-нибудь о регулярных выражениях; хотя бы самые азы. То, что здесь написано, к примеру, сразу станет понятнее. Да и вообще в жизни пригодится; регулярные выражения (в несколько разной форме, но по тому же принципу) -- это не только perl, но и, к примеру, sed, и grep, и rename, и т.д.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: perl: регулярные выражения: взять путь

Сообщение Zeus »

Не беспокойтесь, я в курсе что такое регулярные выражения, хоть их практически и не использую.
Это мощная штука, я не спорю, просто вид у perl'ных программ весьма специфический: примерно как арабская вязь :)
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: perl: регулярные выражения: взять путь

Сообщение t.t »

(Zeus @ May 31 2006, в 12:18) писал(а):Не беспокойтесь, я в курсе что такое регулярные выражения, хоть их практически и не использую.
Это мощная штука, я не спорю, просто вид у perl'ных программ весьма специфический: примерно как арабская вязь
Ну, по перлу на этот предмет не проходился только ленивый. Но это не мешает при должном умении писать на нём вполне читабельные программы. Равно как при желании повыпендриваться не менее арабскую вязь можно написать, скажем, на тех же сях.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Dr.Linux
Сообщения: 272
Статус: Cтудент
ОС: Mandriva Linux 2007 Discovery

Re: perl: регулярные выражения: взять путь

Сообщение Dr.Linux »

А вы почитайте чего-нибудь о регулярных выражениях; хотя бы самые азы. То, что здесь написано, к примеру, сразу станет понятнее. Да и вообще в жизни пригодится; регулярные выражения (в несколько разной форме, но по тому же принципу) -- это не только perl, но и, к примеру, sed, и grep, и rename, и т.д.
А что лучше почитать по регулярным выражениям, подскажите пожалуйста? Раз уж разговор зашел о регулярных выражениях. Без них ни один скрипт не напишешь.
Хау, я сказал Enter.
"Для теории нужны знания, для практики, сверх того, и умение".
А. Н. Крылов
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: perl: регулярные выражения: взять путь

Сообщение elide »

Dr.Linux
man perlre
слава роботам!
Спасибо сказали:
Аватара пользователя
Dr.Linux
Сообщения: 272
Статус: Cтудент
ОС: Mandriva Linux 2007 Discovery

Re: perl: регулярные выражения: взять путь

Сообщение Dr.Linux »

2 elide
Я не по perl спрашивал, а вообще по регулярным выражениям. Чтобы скрипты писать не только на perl, но и на python и на bash. А так спасибо, посмотрю.
Хау, я сказал Enter.
"Для теории нужны знания, для практики, сверх того, и умение".
А. Н. Крылов
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: perl: регулярные выражения: взять путь

Сообщение t.t »

(Dr.Linux @ Jun 1 2006, в 16:01) писал(а):2 elide
Я не по perl спрашивал, а вообще по регулярным выражениям.
А как раз перловые много где используются. А так -- куда надо, туда и копать: man sed, man egrep и т.д.

Вообще, была на perl.ru хорошая статья развёрнутая об использовании регекспов; вот после его кончины всё нигде её найти не могу.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: perl: регулярные выражения: взять путь

Сообщение v04bvs »

Dr.Linux писал(а):
01.06.2006 17:01
2 elide
Я не по perl спрашивал, а вообще по регулярным выражениям. Чтобы скрипты писать не только на perl, но и на python и на bash. А так спасибо, посмотрю.

перл, как я понимаю, является законодателем мод в регулярных выражениях. К тому же, имхо, в нём они самые "нормальные", не то что в этих grep-ах и sed-ах, придумали же, скобки ескейпить (я уже про vim не говорю :)). Поэтому если знать perl-овские регэкспы, то для остального достаточно просмотреть документацию и "найти 10 отличий".
Кстати лучше читать не man perlre а сначала man perl и там смотреть ссылки. Вроде perlretut например.
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl: регулярные выражения: взять путь

Сообщение madskull »

v04bvs писал(а):
02.06.2006 23:04
перл, как я понимаю, является законодателем мод в регулярных выражениях.

Вообще-то, grep и, возможно, sed появились раньше перла. Но да, pcre помощнее будет.

v04bvs писал(а):
02.06.2006 23:04
К тому же, имхо, в нём они самые "нормальные", не то что в этих grep-ах и sed-ах, придумали же, скобки ескейпить (я уже про vim не говорю :)).

grep -P или pcregrep, psed
ArchLinux / IceWM
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: perl: регулярные выражения: взять путь

Сообщение v04bvs »

grep -P или pcregrep, psed

Спасибо, я в принципе уже привык к обычным, но буду знать.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: perl: регулярные выражения: взять путь

Сообщение t.t »

(madskull @ Jun 3 2006, в 00:29) писал(а):pcregrep
Тут и от меня спасибо. В дебиановском грепе -P не работает, так что такая штука может пригодиться.

(v04bvs @ Jun 2 2006, в 22:04) писал(а):если знать perl-овские регэкспы, то для остального достаточно просмотреть документацию и "найти 10 отличий"
Это тоже да, т.к. перловые, насколько я знаю, самые развёрнутые и следовательно самые сложные.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl: регулярные выражения: взять путь

Сообщение madskull »

t.t писал(а):
03.06.2006 14:14
(madskull @ Jun 3 2006, в 00:29) писал(а):pcregrep
Тут и от меня спасибо. В дебиановском грепе -P не работает, так что такая штука может пригодиться.

Э-э-э, я иногда просто не понимаю дебианщиков.
Конечно, стабильность там и всё такое... Но эта опция была добавлена аж в 2000 году...
Может, просто grep так собран?
ArchLinux / IceWM
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: perl: регулярные выражения: взять путь

Сообщение v04bvs »

madskull писал(а):
03.06.2006 21:06
t.t писал(а):
03.06.2006 14:14

(madskull @ Jun 3 2006, в 00:29) писал(а):pcregrep
Тут и от меня спасибо. В дебиановском грепе -P не работает, так что такая штука может пригодиться.

Э-э-э, я иногда просто не понимаю дебианщиков.
Конечно, стабильность там и всё такое... Но эта опция была добавлена аж в 2000 году...
Может, просто grep так собран?

Нет, там такая штука, что для -P надо libpcre, она сейчас в /usr/lib, а grep в /bin и нужен для системных скриптов. В общем для -P нужно переложить libpcre в /lib, а этого они почему то не хотят делать. Более подробно можно помотреть в баглистах для grep.
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl: регулярные выражения: взять путь

Сообщение madskull »

v04bvs писал(а):
03.06.2006 22:21
Нет, там такая штука, что для -P надо libpcre, она сейчас в /usr/lib, а grep в /bin и нужен для системных скриптов. В общем для -P нужно переложить libpcre в /lib, а этого они почему то не хотят делать. Более подробно можно помотреть в баглистах для grep.

В общем, после написания поста я подумал про то же. Не хотят цепляться к библиотеке, которая не является "базовой".
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: perl: регулярные выражения: взять путь

Сообщение t.t »

(madskull @ Jun 3 2006, в 21:32) писал(а):В общем, после написания поста я подумал про то же. Не хотят цепляться к библиотеке, которая не является "базовой".
Именно так. А пересобирать лень, поэтому мне и хорошо, что есть отдельный греп с перловкой.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: