Реклама



закрыть
Правдинский.RU

Хозяйке на замеку (find+sed)

Столкнулся с необходимостью в куче файлов, разбросанных по куче директорий, найти одну строчку, содержащую определённое слово, и удалить её. Сделать это нужно было максимально быстро и, как это часто бывает, удалённо. Оказывается, выход есть!

Мне облегчили жизнь две команды: find и sed. Как-то так получилось, что если find для меня хорошо известная команда и часто применяемая, то вот sed'ом я раньше никогда не пользовался.

Сделал я всё, как часто бывает, через задницу :( Как сделать правильно найти не смог, а времени на вдумчивое разбирание не было. Поэтому делюсь тем, что сделал и надеюсь, что кто-нибудь сможет указать в чём была моя ошибка.

Первая команда находит все файлы в этой и нижних папках по маске и выполняет поиск и удаление нужной строки: find . -name '*.php' -exec sed -i -e '/require/d' {} \;

После этой команды во всех файлах с расширением php были удалены строки require (и require_once тоже). Но данная команда принесла ещё один неприятный побочный эффект. Появились файлы-дублёры у тех файлов, в которых произвелось удаление. Т.е. появилось множество файлов с расширением php-e
?х пришлось удалить второй командой: find . -name '*.php-e' -exec rm -Rf {} \;

Уверен, что замену строки в множестве файлов можно сделать одной командой и моя ошибка где-то в области sed'а, но найти её я так и не смог.

PS На всякий случай уточню, что речь идёт о работе с операционной системой на базе UNIX (в частности я выполнял эти команды на MacOS X, но думаю, что и на linux всё будет примерно так же работать)

>> Добавлено Aist, 18 Октябрь, 2007 - 16:11
Ярлыки: |
Дневник пользователя Aist | войдите или зарегистрируйтесь, чтобы получить возможность отправки комментариев | просмотров: 5696
СЕГОДНЯ: 22/11/2024
НОВОЕ ЗА НЕДЕЛЮ: 0
КОММЕНТАРИЕВ: 0
ВЫ НЕ АВТОРИЗИРОВАНЫ И НАХОДИТЕСЬ ЗДЕСЬ КАК ГОСТЬ



забыл пароль?
зарегистрироваться?
 
« Ноябрь 2024  
Пн Вт Ср Чт Fr Сб Вс
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30