Самый простой способ рекурсивно найти и заменить? - PullRequest
7 голосов
/ 31 марта 2010

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

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

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

Ответы [ 5 ]

13 голосов
/ 31 марта 2010

GNU найти

find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +;
3 голосов
/ 31 марта 2010

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

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

2 голосов
/ 31 марта 2010

ЗШ

sed -i 's/foo/bar/g' **/*.txt
1 голос
/ 08 апреля 2019

попробуйте это: grep -rl "foo" .|xargs sed -i 's/foo/bar/g'

0 голосов
/ 31 марта 2010

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

...