Извлечение первых трех элементов из URL с помощью регулярного выражения - PullRequest
0 голосов
/ 18 мая 2018

Учитывая следующий URL:

http://www.example.com/path1/path2/page

Есть ли простой способ извлечь первые три блока с помощью регулярного выражения, а именно:

http://www.example.com/path1/path2

Я нашел несколько примеровкак сделать это с помощью некоторого кодирования (perl / javascript), однако я был бы очень признателен, если бы кто-то указал мне на пример sed / awk, в котором для этого используется регулярное выражение.Спасибо

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

для извлечения первых трех блоков (в отличие, например, от удаления последнего блока) с регулярным выражением с использованием регулярного выражения Bash:

$ [[ "$var" =~ ^(https?://)?([^/]+/){0,3} ]] && echo $BASH_REMATCH
http://www.example.com/path1/path2/

Объяснено:

  • ^(https?://)? Не беспокойтесь об этом
  • ([^/]+/){0,3} От 0 до 3 блоков, соответствующих выводу

Он поддерживает, например:

$ var=https://www.example.com/path1/path2/page
https://www.example.com/path1/path2/

$ var=www.example.com/path1/path2/page
www.example.com/path1/path2/

$ var=www.example.com/path1/
www.example.com/path1/
0 голосов
/ 18 мая 2018

Решение 1-е: С простым расширением параметров.

echo "${val%/*}"

Решение 2-е: с awk.

echo "$val"  | awk 'match($0,/.*\//){print substr($0,RSTART,RLENGTH-1)}'

Решение третье: С еще одним awk.

 echo "$val" | awk -F"/" 'NF--;1'  OFS="/"

Решение четвертое: С sed.

echo "$val" | sed 's/\(.*\/\).*/\1/;s/\/$//'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...