Bash字符串片段移除:如何去除refs/heads/并保留剩余内容
嘿,这有几个在Bash环境里快速移除指定字符串前缀的实用方法,完美适配你的需求:
方法1:Bash参数扩展(最推荐)
这是Bash内置的原生功能,不需要调用任何外部命令,效率拉满。用${字符串#要移除的前缀}语法就能搞定:
original_str="refs/heads/hotfix/sub_page/105" result="${original_str#refs/heads/}" echo "$result" # 输出:hotfix/sub_page/105
简单解释下:#符号告诉Bash从字符串开头匹配并移除最短的指定前缀。如果你的场景里可能有更长的前缀需要匹配(比如这里不存在,但假设前缀是refs/heads/xxx/这类),可以换成##来移除最长匹配,但你的需求用#就完全足够啦。
方法2:用sed做正则替换
如果你习惯用文本处理工具,sed能处理更复杂的替换场景,这里用来删前缀也很顺手:
original_str="refs/heads/hotfix/sub_page/105" result=$(echo "$original_str" | sed 's/^refs\/heads\///') echo "$result"
这里的sed命令逻辑是:s/匹配规则/替换内容/,^表示只匹配字符串开头的refs/heads/(斜杠需要转义成\/),替换内容为空就等于删掉这个前缀。
方法3:用cut按分隔符截取
因为你的字符串是用斜杠/分隔的,cut可以按字段拆分后截取需要的部分。refs/heads/刚好对应前两个字段(refs是第1个,heads是第2个),所以直接取从第3个字段到结尾的内容就行:
original_str="refs/heads/hotfix/sub_page/105" result=$(echo "$original_str" | cut -d'/' -f3-) echo "$result"
参数说明:-d'/'指定分隔符是斜杠,-f3-表示截取第3个及之后的所有字段,刚好就是你要的剩余内容。
内容的提问来源于stack exchange,提问作者Raaz
相关产品推荐
相关产品推荐

