Нужно переименовать много файлов с именем вида «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
Ссылки по теме:
- Регулярные выражения UNIX
- Введение в sed
- Википедия. Регулярные выражения