LINUX.ORG.RU

sed удалить часть строки до 3го вхождения символа /

 ,


0

1

Господа, подскажите, как реализовать сабж? как sed-ом удалить все до 3го вхождения символа в строке

например:

имеем http://192.168.40.200/cgi-bin/snapshot.cgi

на выходе нужно cgi-bin/snapshot.cgi или /cgi-bin/snapshot.cgi



Последнее исправление: lasthappy (всего исправлений: 1)

Ответ на: комментарий от Xenius

Блин, я даже и не смотрел в эту сторону. Пробовал awk, но там громоздко выходит... Спасибо! То что нужно

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

sed -r вроде как не умеет в задание жадности поиска (greediness), но perl -pe вполне справляется с этим:

$ perl -pe 's/(.*?\/){3}//' <<< 'http://192.168.40.200/cgi-bin/snapshot.cgi'
cgi-bin/snapshot.cgi
kalterfive ★★
()
Последнее исправление: kalterfive (всего исправлений: 1)
Ответ на: комментарий от kalterfive

sed -r вроде как не умеет в задание жадности поиска (greediness)

В большинстве случаев это решается заменой точки на «не-разделитель»:

$ echo "http://192.168.40.200/cgi-bin/snapshot.cgi" | sed -n 's@\([^/]*/\)\{3\}@@p'
cgi-bin/snapshot.cgi


А вообще, для таких простых задач даже sed не нужен, достаточно средств самого bash'а:
$ A="http://192.168.40.200/cgi-bin/snapshot.cgi" ; echo "${A#*://*/}"
cgi-bin/snapshot.cgi

Kroz ★★★★★
()
echo 'http://192.168.40.200/cgi-bin/snapshot.cgi' | sed 's!^\([^/]*/\)\{3\}!!'
evilface ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.