如何用sed命令删除变量前导空格?Jenkins分支名处理求助
Jenkins分支名前导空格清除方案
先修正你之前方法的问题
- 第一个方法
"Branch_name="${Branch_name/ /}":仅会替换第一个出现的单个空格,如果前导是多个空格或制表符这类空白符就会失效,且写法里的多余引号也没必要。 - 第二个方法
Branch_name=$(echo "Branch_name" | sed -i -r "s/^\s//g"):核心错误是echo输出的是字符串Branch_name而非变量值,另外sed -i是修改文件的参数,管道场景下完全不需要,且^\s仅匹配单个前导空白,多个空格清不干净。
可行的解决方法
方法1:Bash参数扩展(推荐,无需外部工具)
仅清除单个前导空白:
Branch_name="${Branch_name##[[:space:]]}"
清除一个或多个前导空白字符(含空格、制表符等),需先开启bash扩展匹配:
shopt -s extglob Branch_name="${Branch_name##+([[:space:]])}"
原理:##表示从变量开头删除最长匹配的模式,[[:space:]]匹配任意空白字符,+([[:space:]])匹配连续多个空白。
方法2:修正后的Sed命令
Branch_name=$(echo "$Branch_name" | sed -r 's/^\s+//')
原理:echo "$Branch_name"正确输出变量值,sed -r 's/^\s+//'匹配开头一个或多个空白并替换为空。
方法3:Awk命令
Branch_name=$(echo "$Branch_name" | awk '{sub(/^[[:space:]]+/, ""); print}')
原理:用awk的sub函数替换开头的连续空白为空,再输出处理后的内容。
内容的提问来源于stack exchange,提问作者Ramesh Thiyagarajan
相关产品推荐
相关产品推荐

