删除正则表达式后的部分名称

删除正则表达式后的部分名称

我有许多使用命名方案的视频文件,例如

一些单词-SxxExx.extension

这是我的偏好。不幸的是我有很多这种格式的文件

一些单词-SxxExx-单词-我想要删除.extension

我需要自动删除 Exx 部分之后的所有内容。

答案1

假设x是占位符,zmv应该能够做到这一点 zmv -nv '(*S??E??)*.ext' '$1.ext'

% touch foo-S01E02-garbage.ext bar-S07E17-moregarbage.ext
% zmv -nv '(*S??E??)*.ext' '$1.ext'
mv -- bar-S07E17-moregarbage.ext bar-S07E17.ext
mv -- foo-S01E02-garbage.ext foo-S01E02.ext

您还可以使用'(*S[0-9][0-9]E[0-9][0-9])*.ext'仅匹配数字来代替x

或者如果你想使用sed

for f in *.ext; do
    echo mv -n "$f" "$(echo "$f" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.ext/\1.ext/')"
done

或者使用 Perlrename命令(显然现在file-rename在 Debian 中被称为):

file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext

(删除echo前面的mv以及和-n的标志来zmv实际file-rename进行重命名。mv -n另一方面告诉它不要覆盖现有文件,这至少在 GNU 中有效mv。)

答案2

怎么样

$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension

(尽管我希望 zsh 爱好者能够使用 shell 替换更简单地做到这一点)。

相关内容