You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何匹配terraform-*、tfRepo-*通配符前缀后截取剩余目录路径

可行实现方案

方案1:sed 实现(兼容性最好)

使用扩展正则匹配,替换掉从路径开头到匹配前缀段后第一个斜杠的所有内容:

# 测试用例1:terraform-前缀
echo /Users/user/Documents/terraform-shared-infra/services/history_book_test | sed -E 's|.*(terraform-|tfRepo-)[^/]+/||'
# 测试用例2:tfRepo-前缀
echo /Users/user/Documents/tfRepo-shared-infra/services/history_book_test | sed -E 's|.*(terraform-|tfRepo-)[^/]+/||'

输出结果:

services/history_book_test
services/history_book_test

原sed写法问题说明

之前的sed逻辑只捕获了前缀段中terraform-到第一个斜杠的内容(即shared-infra),且丢弃了后续路径,所以不符合需求。

方案2:grep 实现(需支持PCRE正则)

利用\K语法丢弃前缀匹配内容,只输出后续路径:

echo /Users/user/Documents/terraform-shared-infra/services/history_book_test | grep -oP '(terraform-|tfRepo-)[^/]+/\K.*'

方案3:awk 实现(逻辑更灵活)

将路径按斜杠拆分后定位匹配的目录段,再拼接后续路径:

echo /Users/user/Documents/terraform-shared-infra/services/history_book_test | awk '{
    split($0, path_arr, "/")
    for (i in path_arr) {
        if (path_arr[i] ~ /^(terraform-|tfRepo-)/) {
            start_idx = i + 1
            break
        }
    }
    for (j = start_idx; j <= length(path_arr); j++) {
        printf "%s%s", path_arr[j], (j == length(path_arr) ? "\n" : "/")
    }
}'

内容的提问来源于stack exchange,提问作者Adi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:30:00