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

如何使用shell脚本按最后一个分隔符提取文件名的左右两部分

Shell按最后一个分隔符拆分文件名的最优实现

直接用Shell内置的参数扩展即可完成,不需要调用sed/awk/cut等外部工具,性能最高,且兼容所有符合POSIX标准的Shell环境(bash/zsh/dash/ash均支持)。

示例代码

# 定义文件名变量
filename='test_testone_test3_1234'
# 提取最后一个下划线之前的内容
file="${filename%_*}"
# 提取最后一个下划线之后的内容
seq="${filename##*_}"

执行后变量$file和$seq的值就是你需要的结果。

语法说明

  • ${变量%模式}:从变量内容的尾部开始匹配最短的符合规则的字符串,删除匹配部分后返回剩余内容。%_*即匹配从尾部开始第一个下划线及之后的所有内容,删除后就得到最后一个分隔符之前的部分。
  • ${变量##模式}:从变量内容的头部开始匹配最长的符合规则的字符串,删除匹配部分后返回剩余内容。##*_即匹配从开头到最后一个下划线的所有内容,删除后就得到最后一个分隔符之后的部分。
    如果需要更换分隔符,只需要把上述语法中的_替换为你需要的分隔符即可,比如按.拆分文件名和后缀的写法就是${filename%.*}和${filename##*.},是Shell中非常常用的写法。

其他可选方案(不推荐批量场景使用)

如果你需要用awk实现也可以,写法如下:

echo "$filename" | awk -F '_' '{seq=$NF; $NF=""; sub(/_$/, "", $0); file=$0} END{print "file=" file, "seq=" seq}'

该方案需要调用外部awk命令,单个文件处理差异不大,批量处理大量文件时性能远低于内置参数扩展方案。


内容的提问来源于stack exchange,提问作者N9909

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:06:07