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

如何修复sed脚本,从Git SSH地址提取组织名与仓库名?

解决sed报错并提取Git SSH地址中的组织与仓库名

错误根源

你第二个sed命令里同时用/作为正则匹配字符和s命令的分隔符,sed会把正则里的/误判为s命令的结束标记,后面的内容被当成无效选项,所以抛出sed: -e expression #1, char 39: unknown option to s错误。

修复后的sed脚本

方案1:统一用#作为s命令分隔符

和第一个脚本保持一致,用#替代/作为s命令的分隔符,这样正则里的/就不会干扰sed解析:

SSH_URL="git@github.com:myOrg/my-repo.git"
# 提取组织名 myOrg
GIT_ORG=$(echo "$SSH_URL" | sed -n 's#^.*:\([^/]*\)/\(.*\)\.git$#\1#p')
# 提取仓库名 my-repo
REPO=$(echo "$SSH_URL" | sed -n 's#^.*:\([^/]*\)/\(.*\)\.git$#\2#p')

# 验证输出
echo "组织名:$GIT_ORG"
echo "仓库名:$REPO"

方案2:转义正则中的/

如果坚持用默认的/作为分隔符,需要把正则里的/转义成\/,让sed识别为普通字符:

SSH_URL="git@github.com:myOrg/my-repo.git"
GIT_ORG=$(echo "$SSH_URL" | sed -n 's/^.*:\([^\/]*\)\/\(.*\)\.git$/\1/p')
REPO=$(echo "$SSH_URL" | sed -n 's/^.*:\([^\/]*\)\/\(.*\)\.git$/\2/p')

更省心的替代方案:用awk处理

awk的字段分割功能更直观,不用纠结分隔符冲突问题:

SSH_URL="git@github.com:myOrg/my-repo.git"
# 以:和/作为分割符,取第4个字段为组织名
GIT_ORG=$(echo "$SSH_URL" | awk -F'[:/]' '{print $4}')
# 以:、/、.作为分割符,取第5个字段为仓库名
REPO=$(echo "$SSH_URL" | awk -F'[:/.]' '{print $5}')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:37:46