从VOB文件名提取季集信息生成正确NFO文件的Bash脚本问题
修正Bash脚本中Season和Episode字段提取逻辑
针对你的VOB文件名格式,要正确提取season(01)和episode(01),需要直接匹配文件名中的SxxExx模式,而非依赖分隔符分割字段。以下是修正后的代码段:
核心提取逻辑
假设脚本中已定义文件名变量filename,替换原season/episode提取代码为:
# 用Bash内置正则匹配SxxExx格式的字段 if [[ "$filename" =~ S([0-9]{2})E([0-9]{2}) ]]; then season="${BASH_REMATCH[1]}" # 提取S后面的两位数字 episode="${BASH_REMATCH[2]}" # 提取E后面的两位数字 fi
逻辑说明
- 正则表达式
S([0-9]{2})E([0-9]{2})精准匹配文件名中的S01E01部分,括号()用于捕获分组:- 第一个分组
([0-9]{2})捕获Season的两位数字(如01) - 第二个分组
([0-9]{2})捕获Episode的两位数字(如01)
- 第一个分组
BASH_REMATCH是Bash内置数组,存储正则匹配结果,索引1对应第一个捕获分组,索引2对应第二个捕获分组。
替换示例
如果原错误代码是按分隔符分割的写法(示例):
# 原错误代码 season=$(echo "$filename" | awk -F ' - ' '{print $2}') episode=$(echo "$filename" | awk -F ' - ' '{print $3}' | cut -d' ' -f1)
直接替换为上述正则匹配代码即可解决问题。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

