У меня есть каталог с несколькими подкаталогами, что все содержат текстовые файлы. В этих текстовых файлах существует определенное слово, которое происходит много раз, и я хочу заменить каждый экземпляр.
Мой Вопрос - Как я выполнил бы это от командной строки Linux? Я не хочу к gedit каждый файл и делаю ручной поиск/замену.
(Для премии - там способ сделать это нечувствительным к регистру способом?)
Вы могли использовать find
и perl
(через xargs
):
find /target/directory -type f | xargs perl -pi -e 's/stringtoreplace/replacement/g'
или если Вы уже находитесь в правильном каталоге
find . -type f | xargs perl -pi -e 's/stringtoreplace/replacement/g'
и если Вы только хотите заменить в, скажем, файлах HTML:
find . -type f -name '*html' | xargs perl -pi -e 's/stringtoreplace/replacement/g'
Вы не должны использовать жемчуг, конечно, никакой инструмент, который выполняет поиск, и операции замены сделают, и не сомнение существуют несколько доступные, которые являются меньшим количеством ресурса, голодного, чем стартовый жемчуг (который является этим случаем, кувалда для взламывания гайки, но это - пример, который я имел сохраненный целую вечность, и у меня нет причины найти более эффективную версию). Моим первоисточником для "приема" является http://oreilly.com/pub/h/73
Можно использовать все опции в том, какой бы ни инструмент Вы выбираете, так в этом случае полная мощность регулярных выражений Perl. Страница, связанная с вышеупомянутым, имеет больше примеров, включая то, как искать в случае нечувствительный способ.
От Вашего дескриптора я полагаю, что Вы могли бы интересоваться решением с помощью Параллели GNU http://www.gnu.org/software/parallel/
find /target/directory -type f | parallel perl -pi -e 's/stringtoreplace/replacement/ig'
Это решение делает замену параллельно, и это нечувствительно к регистру. Параллель GNU не страдает от проблемы разделителя http://en.wikipedia.org/wiki/Xargs#The_separator_problem - только если у Вас есть имена файлов, содержащие новые строки, Вам будет нужна-print0/-0 комбинация.
Посмотрите вводное видео для Параллели GNU: http://www.youtube.com/watch?v=OpaiGYxkSuQ