如何在Bash脚本中移除字符串最后一个连字符后的所有内容?
在Bash中移除字符串最后一个连字符后的内容
这里有几种简单高效的实现方式:
方法1:Bash参数扩展(推荐,纯Bash实现,无需外部工具)
利用Bash自带的参数扩展功能直接处理,是最轻量化的方案:
str="This-is-a-filename-0001.jpg" result="${str%-*}" echo "$result" # 输出: This-is-a-filename
解释:${str%-*}会从字符串末尾开始匹配最短的-*模式(也就是最后一个-及其后面的所有内容),并将这部分删除。如果字符串里没有连字符,原字符串会保持不变。
方法2:使用sed命令
通过正则表达式匹配并替换目标内容:
str="This-is-a-filename-0001.jpg" result=$(echo "$str" | sed 's/-[^-]*$//') echo "$result"
解释:正则-[^-]*$精准匹配最后一个-,以及它后面所有非-的字符直到字符串结尾,再用空字符串替换掉这部分内容。
方法3:使用awk命令
通过调整字段数来实现需求:
str="This-is-a-filename-0001.jpg" result=$(echo "$str" | awk -F '-' '{NF--; OFS="-"; print $0}') echo "$result"
解释:-F '-'把连字符设为字段分隔符,NF--去掉最后一个字段,OFS="-"指定输出分隔符为连字符,最后打印剩余字段拼接后的结果。
内容的提问来源于stack exchange,提问作者Benjamin Allison
相关产品推荐
相关产品推荐

