Regex переставить строки имени файла? - PullRequest
1 голос
/ 29 ноября 2011

Мне нужно переименовать примерно 50 000 файлов, и я не могу найти примеры регулярных выражений, которые работают. Вот шаблон для всех имен файлов

myfiletitle.jpg_download=12500

Числовые идентификаторы в конце имен файлов имеют одинаковую длину - 5 цифр - и все имена файлов соответствуют этому шаблону. Из оболочки Bash я хочу запустить пакетное переименование, чтобы реструктурировать имена файлов следующим образом:

12500_myfiletitle.jpg

Это должно быть легко, но я просто не могу заставить регулярное выражение работать. У меня был некоторый успех со следующим, но в целом я не могу получить полное решение:

s/\(.*\).../\1/

Заранее спасибо !!

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011
s/\(.*)\.jpg_download=\([0-9]\{5\}\)$/\2_\1.jpg/

Это использует sed -подобные регулярные выражения, как намекается в иллюстративном регулярном выражении вопроса. В Perl вы бы написали:

s/(.*)\.jpg_download=(\d{5})$/$2_$1.jpg/
0 голосов
/ 29 ноября 2011

Если две части, которые вы хотите сохранить, всегда разделены '_download =', тогда:

sed 's/\(.*\)_download=\(.*\)/\2_\1/'
...