Bash 使用正则表达式从URL提取前三个元素
Bash 使用正则表达式从URL提取前三个元素,bash,shell,awk,sed,Bash,Shell,Awk,Sed,给定以下URL: http://www.example.com/path1/path2/page 有没有一种简单的方法可以用正则表达式提取它的前三个块,即: http://www.example.com/path1/path2 我已经找到了一些如何使用一些编码(perl/javascript)的示例,但是如果有人给我指出一个使用正则表达式的sed/awk示例,我会非常感激。 感谢解决方案1:具有简单的参数扩展 echo "${val%/*}" 第二种解决方案:使用awk echo "$va
给定以下URL:
http://www.example.com/path1/path2/page
有没有一种简单的方法可以用正则表达式提取它的前三个块,即:
http://www.example.com/path1/path2
我已经找到了一些如何使用一些编码(perl/javascript)的示例,但是如果有人给我指出一个使用正则表达式的sed/awk示例,我会非常感激。
感谢解决方案1:具有简单的参数扩展
echo "${val%/*}"
第二种解决方案:使用awk
echo "$val" | awk 'match($0,/.*\//){print substr($0,RSTART,RLENGTH-1)}'
echo "$val" | awk -F"/" 'NF--;1' OFS="/"
解决方案3:再加一个awk
echo "$val" | awk 'match($0,/.*\//){print substr($0,RSTART,RLENGTH-1)}'
echo "$val" | awk -F"/" 'NF--;1' OFS="/"
解决方案4:使用sed
echo "$val" | sed 's/\(.*\/\).*/\1/;s/\/$//'
解决方案1:具有简单的参数扩展
echo "${val%/*}"
第二种解决方案:使用awk
echo "$val" | awk 'match($0,/.*\//){print substr($0,RSTART,RLENGTH-1)}'
echo "$val" | awk -F"/" 'NF--;1' OFS="/"
解决方案3:再加一个awk
echo "$val" | awk 'match($0,/.*\//){print substr($0,RSTART,RLENGTH-1)}'
echo "$val" | awk -F"/" 'NF--;1' OFS="/"
解决方案4:使用sed
echo "$val" | sed 's/\(.*\/\).*/\1/;s/\/$//'
要使用Bash regex使用正则表达式提取它的前三个块(与例如remove last块相反),请执行以下操作:
$ [[ "$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/
要使用Bash regex使用正则表达式提取它的前三个块(与例如remove last块相反),请执行以下操作:
$ [[ "$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/
因为我需要将它们插入一个循环中,所以解2、3和4是完美的。我都测试过了。它们都可以工作,除了解决方案3为URL返回两个实例。非常感谢@卡拉,很高兴它帮助了你,干杯,继续学习和分享。因为我需要将它们插入一个循环中,解决方案2、3和4是完美的。我都测试过了。它们都可以工作,除了解决方案3为URL返回两个实例。非常感谢@卡拉,很高兴它帮助了你,干杯,继续学习和分享。