Я хочу рекурсивно перерыть каталог текстовых файлов и заменить каждое возникновение foo
в файлах с bar
. Что самый легкий путь состоит в том, чтобы выполнить это?
Я предполагаю, что grep сделал бы задание в одной строке, но я, может казаться, не нахожу пример этого.
Я работаю в OS X.
GNU find
find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +;
Есть хороший бесплатный текстовый редактор, который сделает такие вещи просто и легко : TextWrangler .
grep
используется только для поиска вещей, а не для их изменения.
Для модификаций с интерфейсом, подобным grep, обычно используется sed
. Сам по себе sed
не поддерживает никакой рекурсии - он работает только с одним файлом за раз. Чтобы добавить это, вы обычно используете find
, чтобы найти файлы, содержащие желаемый шаблон, а затем вызываете sed
для изменения файла.