不区分大小写的 bash 字符串替换

Fre*_*edo 3 bash shell-script

我正在尝试制作一个合并两个字幕的脚本。

file.srt
file.forced.srt
file2.srt
file2.Forced.srt
Run Code Online (Sandbox Code Playgroud)

我有一个不区分大小写的匹配两个强制字幕。

shopt -s extglob
shopt -s nocaseglob

for file in "${1%/}/"*forced.srt; do
   echo File: "$file"
done
Run Code Online (Sandbox Code Playgroud)

我有这段代码可以从文件名中删除强制字符串,因此我可以在脚本中使用匹配的文件

subs=${file//.Forced/}
Run Code Online (Sandbox Code Playgroud)

如何forced从我的变量中删除这个字符串,不区分大小写?

Mic*_*mer 6

您需要此处的shell 选项nocasematch而不是(仅仅)nocaseglob

如果启用了 shell 选项(请参阅The Shoptbuiltinnocasematch中对 shopt 的描述),则执行匹配时不考虑字母字符的大小写。

nocaseglob仅适用于真正的文件名扩展(就像您在 for 循环中使用的那样),但不适用于发生模式匹配的其他地方。对于您的用例,您实际上需要启用两者,以便文件名扩展和模式匹配都可以完成。

仅对于该位置的两个字符,您可以使用 [Ff]两者Ff那里进行匹配。