使用正则表达式从URL中提取前三个元素

时间:2018-05-18 08:59:59

标签: bash shell awk sed


给出以下URL:

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

是否有一种简单的方法可以使用正则表达式提取前三个块,即:

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

我已经找到了一些如何用一些编码(perl / javascript)做的例子但是如果有人指出我使用正则表达式来做sed / awk示例,我真的很感激。 感谢

2 个答案:

答案 0 :(得分:2)

解决方案1: 使用简单的参数扩展。

echo "${val%/*}"

解决方案第二: awk

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

解决方案3: 再增加一个awk

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

解决方案第四: 使用sed

echo "$val" | sed 's/\(.*\/\).*/\1/;s/\/$//'

答案 1 :(得分:1)

使用正则表达式使用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/