正規表現パターンを使用してLinuxでファイル名を変更する

正規表現パターンを使用してLinuxでファイル名を変更する

次のような多くのファイルの名前を変更したいと思います。

Tum Hi Ho [www.DJMaza.Com].mp3到着Tum Hi Ho.mp3

そのために私はこのコマンドを使用しました。しかし、何とか動作しません。

`rename -n 's/(.*)([.*])(\.mp3)/$1$3/' *.mp3`

答え1

近いですが、十分ではありません。

rename -n 's/\[[^\]]+\]//' *.mp3

問題は、これが[]特殊な正規表現構造なので、実際の角かっこと一致させるには角かっこをエスケープする必要があることです。これが私のバージョンではバックスラッシュの目的です。

エスケープされていない括弧は文字クラスと呼ばれるものを形成します。文字クラスは、デフォルトで角括弧内のすべての文字と一致します。したがって、[.*]ピリオドまたはアスタリスクと一致します。^クラスの先頭にキャレット()を追加すると、すべての文字と一致します。いいえかっこ内。

\[私の正規表現では、開くかっこと閉じ括弧ではなく、1つ以上の文字[^\]]+と閉じ括弧を一致させ、\]その文字をすべて削除します。

関連情報