LINUX.ORG.RU

sed regexp

 , ,


0

3

Я новичек в регэкспах, поэтому прошу помощи. Я хочу оставить прямые ссылки на архивы только с одного сайта (вернее всех поддоменов третьего уровня сайта goodsite.ru), а остальные - направить на корень сайта goodsite.ru Все ссылки заканчиваются кавычкой " скобкой > или пробелом. Ссылки могут быть http,https,ftp.

regexp сочинял с помощью сайта http://www.regexr.com

Пришел к такой команде:

sed 's;(ht|f)tp[s]?://(?![^\.]*\.goodsite\.ru)[^< >"]*\.(zip|rar|7z);http://goodsite.ru;g'
Почему то она не работает, и я не могу понять почему. У меня стоит GNU sed версия 4.2.1

Как мне надо переделать команду, что бы она заработала?


Потому что sed использует POSIX-регулярки, без ключа -r так вообще POSIX basic. Но ключ этот тебя не спасёт, потому что никакие POSIX-регулярки не умеют negative lookahead ((?!…) который). Выхода у тебя два: переписать регексп или perl -pe.

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

Спасибо, sed неприниципиален. Perl отличный выход. Спасибо за ответ!

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

sed 's;(ht|f)tp?://(?![^\.]*\.goodsite\.ru)[^< >«]*\.(zip|rar|7z);http://goodsite.ru;g'

facepalm

Почему то она не работает, и я не могу понять почему.

я-то понимаю почему, но рулёзы(5.2) не велят говорить.

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