Самый легкий способ рекурсивно найти и заменить?

Я хочу рекурсивно перерыть каталог текстовых файлов и заменить каждое возникновение foo в файлах с bar. Что самый легкий путь состоит в том, чтобы выполнить это?

Я предполагаю, что grep сделал бы задание в одной строке, но я, может казаться, не нахожу пример этого.

Я работаю в OS X.

7
задан Eric Wilson 31 March 2010 в 14:13
поделиться

4 ответа

GNU find

find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +;
13
ответ дан 6 December 2019 в 09:59
поделиться

Есть хороший бесплатный текстовый редактор, который сделает такие вещи просто и легко : TextWrangler .

0
ответ дан 6 December 2019 в 09:59
поделиться

zsh

sed -i 's/foo/bar/g' **/*.txt
2
ответ дан 6 December 2019 в 09:59
поделиться

grep используется только для поиска вещей, а не для их изменения.

Для модификаций с интерфейсом, подобным grep, обычно используется sed . Сам по себе sed не поддерживает никакой рекурсии - он работает только с одним файлом за раз. Чтобы добавить это, вы обычно используете find , чтобы найти файлы, содержащие желаемый шаблон, а затем вызываете sed для изменения файла.

3
ответ дан 6 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: