Я пытаюсь вручную извлечь дайджесты из ресурсов Rails (не спрашивайте). Я был направлен в ZMV для простого поиска / замены на основе регулярных выражений. Но обычный {32}
синтаксис для указания количества повторений не работает:
$ zmv -n '(**/)(*)' '$1${2//-[A-Za-z0-9]\{32\}/}'
Я пробовал некоторые другие форматы. Это, например, работает, но слишком жадно (например, image-3.png
3.png превратится в image.png
):
$ zmv -n '(**/)(*)' '$1${2//-[A-Za-z0-9]##\./.}'
Этот синтаксис двойного хеширования обнаружился только после большого количества Google (я бы ожидал +
). Но я не могу на всю жизнь найти, как заставить {32}
работать. Я пробовал #32#
? Который, казалось, работал, но это потому, что он читал это как (в моих глазах) ?32?
и это означает, что он встретил все, что было три в дайджесте или последний символ.
Как я могу обозначить повторение символов в ZMV?
РЕДАКТИРОВАТЬ:
Видимо, это поможет некоторым просматривать имена файлов, которые я пытаюсь сопоставить? Для ясности: мой вопрос "как я обозначаю повторение символов в zmv", а не "как мне сопоставить эти имена файлов" (вопрос, на который я знаю ответ в стандартном формате RegEx). Если это поможет, вот мое предназначение до и после:
directory/asset-jej4jtifne9bjkkeuwr09rewrewlur23.css
another-directory/style-748reiodlpqwerntaerwerwerexfzsdf.js.gz
directory/subdirectory/this-is-a-thing-qwertyuiopasdfghjklzxcvbnm123456.js
third-directory/should-not-match-3.css
Должно стать:
directory/asset.css
another-directory/style.js.gz
directory/subdirectory/this-is-a-thing.js
third-directory/should-not-match-3.css
ВТОРОЙ РЕДАКТИРОВАТЬ:
Поскольку мне нужно было сделать это вчера, я проделал долгий путь и (как и ожидалось) это сработало. Я все еще хотел бы знать, как избежать этого в будущем. Вот команда, которую я использовал в итоге (я повторил свой совпадение символов 32 раза явно):
$ zmv '(***/)(*)' '$1${2//-[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]/}'
Третье редактирование:
Для записи, я использую zsh на OS X. Я полагаю, что zmv одинаково для разных платформ, но я не могу сказать наверняка.