Сопоставление () с регулярным выражением Unix/Linux

Сопоставление () с регулярным выражением Unix/Linux

У меня есть пара файлов с названием

(a).1
(a).2
...
(a).100

Так как многим инструментам обработки не очень нравится (и )в имени файла, я подумал, что лучше переименовать их в другое имя. Я погуглил по поводу переименования файлов и нашел замечательный инструмент, renameв котором я могу скормить регулярное выражение. Хорошо, давайте попробуем это:

$ rename -v s/\(a\)/b/ \(a\).* 

(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3

Хмм, не то, что я ожидал. Немного погуглив, я обнаружил, что \( \)этооператор группировки. Что в некотором роде имеет смысл, поскольку я не избежал ( )команды.

Я решил проблему переименования, используя .символ, который соответствует всем типам значений:

rename -v s/.b./b/ \(b\).*

Это решение не очень хорошее. Так как мне сопоставить (и )в Bash/Linux/Unix Regex?

решение1

Вот что вам нужно:

find -name "(*)*" -type f | rename 's/\(|\)//g'

Сначала он находит файлы в текущем каталоге, соответствующие описанному имени, затем переименовывает их, удаляя скобки. Вы можете видеть, что соответствующие символы ( и ) заменяются ничем.

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