Реклама



закрыть
Правдинский.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 | войдите или зарегистрируйтесь, чтобы получить возможность отправки комментариев | просмотров: 5591
СЕГОДНЯ: 09/05/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 31