Как следует из названия, я ищу команду/инструмент - желательно что-то, запускаемое из терминала (я использую Ubuntu на удаленном сервере), которое может заменить определенную часть нескольких каталогов одновременно. Структура папок такая:
Example.of.Structure[app]
Another.Example[app]
Third.Example.of.Structure[app]
И я хочу переименовать все папки, чтобы часть [app] была удалена из названий папок.
Я пробовал поиграться с базовыми RegEx. Сопоставление квадратных скобок и текста внутри них.
Кажется, это работает отлично, когда я использую его для"найти его"- но я действительно не уверен, как это оформить в виде команды.
Регулярное выражение, которое я придумал для поиска текста внутри скобок (включая сами скобки), было следующим:\[\w+\]
Но как мне оформить это в виде команды?
Спасибо.
решение1
Вам на самом деле не нужно регулярное выражение для этого. Простой shell glob плюс расширение параметра сделают это:
$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/
(удалите, echo
как только убедитесь, что предложенные замены верны).
Если вы хотите использовать инструмент на основе регулярных выражений, то rename/prename
очевидным выбором будет инструмент на основе Perl:
$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)
(удалите, -n
как только убедитесь, что предложенные замены верны).
Оба они соответствуютпервыйВхождение шаблона. Если есть вероятность, что шаблон [app]
может встретиться где-то еще, рассмотрите возможность привязки соответствия к концу шаблона. СмотритеЯкоря начала и конца строки