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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16