如何用sed或awk从两个不同URL中提取指定路径段?
提取URL中指定片段的sed/awk解决方案
有两个URL变量:
normal="https://example.com/techsol-devops/slr-devops/-/pipelines/10112283" dedicated="https://example.com/ims/techsol-devops/oa/oa-tenants/slr-devops/-/pipelines/3359684"
需要提取从https://之后到techsol-devops(包含该段)的内容,预期结果:
- 对normal变量:
example.com/techsol-devops - 对dedicated变量:
example.com/ims/techsol-devops
你之前的sed命令因固定匹配两段路径,无法适配normal变量的结构,以下是可行的解决方案:
方案1:sed命令
使用非贪婪匹配的正则,同时适配两种URL结构:
sed -E 's|https://(.*?techsol-devops).*|\1|'
说明:
.*?是非贪婪模式,会匹配到第一次出现techsol-devops的位置,不管前面有几段路径,都能准确截取到目标结尾。- 测试验证:分别对两个变量执行该命令,都能得到符合预期的结果。
方案2:awk命令
如果偏好awk,可以通过分割字段的方式实现:
awk -F '/' '{res=""; for(i=3; i<=NF; i++) {res=res $i; if($i=="techsol-devops") break; res=res "/"} print res}'
说明:
- 以
/为分隔符切割URL,从第3个字段开始拼接内容; - 每拼接一个字段后检查是否为
techsol-devops,是则停止拼接,最后输出结果。
内容的提问来源于stack exchange,提问作者bessey
相关产品推荐
相关产品推荐

