sed

2012-10-03 от slayer

При появлении необходимости замены в во множестве файлов одного набора символов на другой (например для изменения путей, при переносе хостинга или редактировании файлов-зон), можно использовать следующую конструкцию:

find . -type f -exec sed -i 's/mail\.q0\.ru\?./mail\.184v1\.q0\.ru\./' {} \;
При выполнении происходит следующее:
файнд, ищет в текущей директории только файлы и передает их седу, который в свою очередь, меняет все записи «mail.q0.ru» и «mail.q0.ru.» (если быть точным, то не mail.q0.ru. с точкой в конце, а вообще с любым символом, просто в моей систуации, там могла быть только точка) на «mail.184v1.q0.ru.» во всех файлах.
«?.» — обозначает наличие либо отсутствие одного любого символа. Если нужно просто заменить один набор символов другим, просто удаляем «?.»

find * -type f -exec sed -i 's/dbhe21/mysql52/g' {} \; //так должна выглядеть команда. Она заменяет во всех файлах dbhe21 на mysql52

find * -type f -exec sed -i .original 's/dbhe21/mysql52/g' {} \; //во всех файлах происходит замена, но старые файлы сохранятся с расширением .original, что приведет к дубликату всех файлов, которые надо будет удалить.

find ./ -name *.original-type f -exec rm {} \; //удаляет все файлы, заканчивающиеся на .original. Иногда почему-то срабатывает только после второго применения.

Запись опубликована в рубрике overminds с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий