Пакетное переименование на основе захвата регулярных выражений
Простите, что у меня нет исследований, но я просто не знаком со всеми инструментами.
Я хочу, чтобы пакетное переименование списка файлов, который идет как
some_name_n1_51000 some_name_n2_51000 some_name_n3_51000 ...
это на самом деле должно быть названо
some_name_n51000_1 some_name_n51000_2 some_name_n51000_3 ...
то есть 51000 и серийный номер должны поменяться местами.
Следующее работает в Debian, используя rename
скрипт perl (который называется prename
):
prename -nv 's/some_name_n(\d)_51000/some_name_n51000_$1' *
Обратите внимание, что -v
дает подробный вывод и -n
означает, что он делает пробный прогон. Финал *
- это селектор файлов.
Причины, по которым сначала это не сработало:
- Я использовал
rename
вместо сценария Perlprename
. - Я забыл захватить регулярки группы между скобками, который затем хранятся в переменном
$1
($2
,$3
для второй и третьей группы, и так далее).
Что можно улучшить:
На Debian Strech это дает мне предупреждение об устаревании
Используемая устаревшая программа: переименование, поставляемое с пакетом perl Debian, будет удалено после выпуска stretch. Пожалуйста, установите отдельный пакет «переименовать», который будет предоставлять ту же команду.
rename
Пакет, однако, принимает несколько различных команд.
0 ответов на вопрос
Похожие вопросы
-
14
Regex инструмент для Linux
-
3
Не могу понять, почему это регулярное выражение не применяется
-
2
Удаление новых строк из файла RTF с помощью sed
-
-
5
Grep инструмент для XML
-
4
Какая польза от? в команде grep .. и практическое использование
-
13
Разбор текстовых файлов
-
1
Есть ли противоположность: g в vim?
-
1
Замените имя файла на filepath на sed
-
6
Редактор с мути-линией поиска и замены
-
2
Поиск Outlook 2003 с использованием регулярного выражения