Переименование файлов в 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

Проблема в том, что []это специальная конструкция регулярного выражения, и поэтому скобки должны быть экранированы, если они должны соответствовать фактическим скобкам. Это цель обратных косых черт в моей версии.

Неэкранированные скобки образуют то, что называется классом символов. Класс символов может в принципе соответствовать любому из символов внутри скобок. Так что [.*]соответствует точке или звездочке. Когда вы добавляете каретку ( ^) в начало класса, он соответствует любому символунетв скобках.

В моем регулярном выражении мы сопоставляем открывающуюся скобку \[, один или несколько символов, которые не являются закрывающимися скобками, [^\]]+плюс закрывающуюся скобку \]и удаляем все это.

Связанный контент