正規表現の後の名前の一部を削除する

正規表現の後の名前の一部を削除する

次のような命名規則を使用しているビデオファイルがいくつかあります

いくつかの単語-SxxExx.extension

これは私の好みです。残念ながらこの形式のファイルがたくさんあります

削除したい単語SxxExx.extension

Exx 部分の後のすべてを自動的に削除する必要があります。

答え1

'sがプレースホルダーであると仮定するとxzmv次のように実行できるはずです。 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コマンド (Debian ではどうやらこう呼ばれているようですfile-rename):

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

(実際に名前の変更を行うには、echoの先頭から を削除し、とからフラグを削除します。一方で、 は既存のファイルを上書きしないように指示します。これは、少なくとも GNU では機能します。)mv-nzmvfile-renamemv -nmv

答え2

いかがでしょうか

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

(ただし、zsh 愛好家であれば、シェル置換を使用してもっと簡単に実行できると思います)。

関連情報