この正規表現のオネライナーを改善する方法はありますか?

この正規表現のオネライナーを改善する方法はありますか?

次の構文を使用するビデオファイルがたくさんあります。

TV.Show.Title.SXEY.Episode.Title.1080p.Uploader.mkv

これはSXEY定数ではありません。ファイルによって異なりますXY名前を次に変更したいです。

TV Show Title - SXEY - Episode Title.mkv

これを行うには、rename次のコマンドを使用します。

rename 's/\./\ -\ /;s/\./\ -\ /;s/\.(?!mkv)/\ /g;s/1080p.*(?=\.mkv)//g' *.mkv

このコマンドは最初に最初の2つの点をに変換し、他のすべての␣-␣点を空白に変換し、最後にエピソードのタイトルの終わりとファイル拡張子の間のすべての内容を削除します。

これがどのように改善されるのか、どのようなアイデアがありますか?正規表現を使って最初の2点を変換する方法があると思います。私はrenameそれがGNUユーティリティであると信じているので、すべてのUnixシステムには存在せず、より移植可能な代替策を探しています。

ベストアンサー1

この質問は実際にそれに関するものであり幸いですregex。同じ質問をして頭が痛くならないようにしたいです。

for m in *.mkv; 
    do echo mv $m "$(awk -F'.' '{
        printf "%s %s %s - %s - %s %s.%s", $1, $2, $3, $4, $5, $6, $(NF)}' <<<$m)";
done

出力文字列は予測可能で読みやすく、修正が容易です。ただ削除してくださいecho

編集する

以下のコメントに関してsed同じ技術を使用し、代わりに出力用のファイル名を処理できますsedawk

for m in *.mkv; 
    do echo mv $m "$(sed 's/\./ /1;s/\./ /1;s/\./ - /1;s/\./ - /1;s/\./ /1;s/\..*\././' <<<$m)";
done

おすすめ記事