Замена текста по количеству файлов - PullRequest
2 голосов
/ 27 июня 2011

Мне стало удобно использовать выражения в Vim для замены больших файлов, и я хотел бы узнать, какую утилиту можно изучить, что позволит мне делать такие вещи в папках файлов аналогичным образом. Какая программа командной строки для поиска и замены больше всего похожа на vims и работает в разных папках?

Ответы [ 3 ]

5 голосов
/ 27 июня 2011
sed -i.bak 's/foo/bar/g' * 

заменит каждое foo на bar в каждой строке каждого файла в текущем каталоге и создаст файл резервной копии с расширением .bak.

Так что я бы посмотрелв sed.Но ... Вим очень способна:

vim -c "bufdo!%s/foo/bar/g" -c "wqa" *

- почти то же самое.bufdo! выполняет следующую команду (%s/foo/bar/g в этом случае => заменить каждый foo на bar в каждой строке (% - это специальный адрес строки для каждой строки)).wqa означает: напишите все, затем выйдите.Вы можете указать не более 10 -c переключателей на Vim, которые будут выполняться в указанном порядке.Итак, в основном это автоматизация Vim:

  1. открыть каждый файл в текущем каталоге => каждый файл имеет свой собственный буфер
  2. выполнить подстановку в каждом буфере
  3. затем запишите файлы и закройте

Единственное отличие - отсутствие создания файла резервной копии (что может быть легко достигнуто с некоторыми настройками .vimrc).Но sed быстрее.

2 голосов
/ 27 июня 2011

вы можете сделать это, комбинируя perl и bash например:

find . -type f -name "*.cpp" -print | xargs perl -i -pe 's/pattern/replace/g' 

это найдет все файлы '.cpp', начинающиеся с '.' и передать (pipe) каждый из них (путь) команде perl

2 голосов
/ 27 июня 2011

вероятно, вы должны использовать vim не внешнюю программу командной строки. см :help :find или :help :grep

Например,

, если вы хотите отображать слова в папках, передайте **/*.txt.

...