Stu*_*Stu 4 bash string shell-script filenames
我正在尝试在 Mac OS X 10.6(由 Automator Action 调用)中编写一个 bash shell 脚本来重命名多年来我命名不当的电视节目 DVD 翻录。我想删除文件名中的部分文本。我想删除出现在我知道将始终出现在文件名中的一系列特定字符之后的文本。但是我不知道在已知的一系列字符之前或之后会出现多少个字符。我也不知道之前或之后的文本是否会包含多个句点或破折号。一个例子可能会有所帮助:
The.Big.Bang.Theory.S01E01.xxxxxxxxxxx.mp4
我知道每个文件总是包含一个 SxxExx 格式的字符串,其中 x 总是数字。但我不知道数字会是多少。我想让文件名包含 SxxExx 字符串和文件扩展名,但去掉其他所有内容。所以对于上面的例子,我最终会得到:
The.Big.Bang.Theory.S01E01.mp4
我曾尝试使用 bash 的内置字符串替换命令。我认为 expr index 命令会给我 SxxExx 字符串的起点,然后我可以使用 ${filename:offset:length} 只提取文件名的所需部分(我已经知道扩展名,以便可以重新 -添加)。但似乎 OS X 版本的 expr 不包含索引功能。我之前只用 Basic 和 LotusScript 编写过脚本。在这些环境中,使用诸如“Like”和“Instr”或“Mid”之类的命令会相当容易。但在 bash 中,我就是想不通。我花了几个小时在谷歌上搜索试图了解如何使用正则表达式来定位文件名中的“SxxExx”子字符串,但我就是想不通。我希望一些聪明的 UNIX 脚本编写者能够帮助我!
尝试这个:
newname=`echo "$filename" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.mp4/\1.mp4/'`
Run Code Online (Sandbox Code Playgroud)
正则表达式为:
在替换表达式中: