Столкнулся с необходимостью в куче файлов, разбросанных по куче директорий, найти одну строчку, содержащую определённое слово, и удалить её. Сделать это нужно было максимально быстро и, как это часто бывает, удалённо. Оказывается, выход есть!
Мне облегчили жизнь две команды: 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 всё будет примерно так же работать)