Пакетное переименование с использованием регулярных выражений, но с сохранением некоторой подстроки

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

* На основе паттернов, переименование пакетного файла в терминале

Моя проблема в том, что я хочу сделать пакетное переименование с использованием Regex, но мой код не работает.

У меня внутри папки разные файлы с такими именами:

name_house_1_door.jpg
name_house_2_door.jpg
name_house_3_door.jpg
name_house_4_door.jpg

И я хочу переименовать файлы следующим образом:

name_house_1.jpg
name_house_2.jpg
name_house_3.jpg
name_house_4.jpg

Код, который приблизительно соответствует большей части того, что я хочу было:

$  rename -v 's/house\_[0-9]\_door/house_[0-9]/'

Но, как вы должны знать, первый файл был переименован в: name_house_ [0-9] .jpg

0
задан 5 August 2014 в 03:04

4 ответа

Необходимо использовать обратные ссылки . Классы символов ничего не означают в выражении замены. На самом деле немного символов имеют особые значения в выражении замены. Я предполагаю что-то как:

rename -v 's/house_([0-9])_door/house_$1/'

(или)

rename -v 's/(house_[0-9])_door/$1/'

кроме того, действительно используйте эти -n флаг для наблюдения, какие переименования произойдут прежде на самом деле выполнить их.

1
ответ дан 5 August 2014 в 03:04
  1. Вы выходите из подчеркивания в поисковой стороне выражения и не должны быть.
  2. Вам нужен подпоиск (числа) и заполнитель, чтобы сохранить и использовать результат подпоиска.

Добавляющие круглые скобки вокруг эти [0-9] создадут необходимый подпоиск. Так как это - первый подпоиск, это может упоминаться как 1$ в стороне замены. Результат следует..

rename -v 's/house_([0-9])\_door/house_$1/' *

Hope это помогает.

2
ответ дан 5 August 2014 в 03:04

Намного более легкий путь состоял бы в том, чтобы просто удалить _door, использование переименовывает:

rename -v 's/_door//' *

Это ищет _door и ничем заменяет его, по существу удаляя его.

2
ответ дан 5 August 2014 в 03:04

Это работает в Shell

for file in *.jpg;  
    mv -n $file (basename $file _door.jpg).jpg; 
end
Рыбы
0
ответ дан 5 August 2014 в 03:04

Другие вопросы по тегам:

Похожие вопросы: