如何在Bash中替换特定字符:将_v转空格、最后一个点转短横线
正确的字符串替换实现方法
针对原始字符串src-env-package_v1.0.1.18,要完成两个替换需求:将_v替换为空格,将最后一个英文句点.替换为短横线-,可以使用以下组合sed命令实现:
echo "src-env-package_v1.0.1.18" | sed -e 's/_v/ /' -e 's/\.\([^.]*\)$/-\1/'
命令解释
- 第一个替换规则
s/_v/ /:精准匹配字符串_v并替换为空格,不会像tr '_v' ' '那样单独替换每个_和v,避免破坏原字符串中的env等包含v的子串。 - 第二个替换规则
s/\.\([^.]*\)$/-\1/:\.\([^.]*\)$匹配字符串末尾的最后一个英文句点,以及句点后所有非句点字符;-\1将匹配部分替换为短横线加上捕获到的句点后内容,实现最后一个句点转短横线的效果。
为什么之前的方法出错
- 使用
sed 's/_v/ /'只完成了第一个替换,没处理最后一个句点的转换; tr '_v' ' '是单个字符替换工具,会把所有_和v都换成空格,导致原字符串中env的v被替换,出现src-en -package的错误输出。
内容的提问来源于stack exchange,提问作者freshGrad
相关产品推荐
相关产品推荐

