23 янв. 2011 г.

Sed. Tip 1. Группы в регулярных выражениях на примере переименования файлов

Нужно переименовать много файлов с именем вида «gost_01.02.2010.txt» в «gost_2010.02.01.txt» для сортировке по дате без проблем.

Пример замены:
$ echo "gost_01.02.2010.txt" | sed -r 's/([[:alpha:]]+)_([0-9]{2})\.([0-9]{2})\.([0-9]{4})\.txt$/\1_\4\.\3\.\2\.txt/g'
gost_2010.02.01.txt

Тут используется команда sed'a s/regexp/replacement/flags.
С помощью регулярного выражения (regexp) ищутся и разбиваются по группам интересующие нас поля. Затем исходная строка заменяется на replacement, в данном случае просто переставляем найденные группы и получаем нужное имя файла. Флаг g можно тут и не использовать, он нужен для замены всех совпадений.

Переименование всех файлов, начинающихся с «gost» в данном каталоге:
for file in ./gost*
do
    mv ${file} `echo ${file} | sed -r 's/([[:alpha:]]+)_([0-9]{2})\.([0-9]{2})\.([0-9]{4})\.txt$/\1_\4\.\3\.\2\.txt/g'`
done

Ссылки по теме:
  1. Регулярные выражения UNIX
  2. Введение в sed
  3. Википедия. Регулярные выражения

Комментариев нет :

Отправить комментарий