Как «найти и заменить» много файлов?

11

Я использую grepкоманду для поиска строки во многих файлах. Есть ли что-то похожее на «поиск и замена»?

Том Брито
источник

Ответы:

19

Вы ищете sedкоманду. Например, чтобы заменить «собаку» на «кошку» во всех текстовых файлах в текущем каталоге:

sed -i 's/dog/cat/' *.txt
Jjed
источник
1
Просто и приятно.
Луис Альварадо
1

Сед приходит на ум. Пример:

sed s/cat/dog/ <input >output

Это ищет кошку в строке и помещает собаку на ее место во входном файле и записывает в выходной файл.

Kerkdyk
источник
1

sedправильный инструмент; но, в качестве альтернативы, вы можете даже использовать exкоманды в vim:

vim -c 'args <files> | argdo %s/cat/dog/g | x'

где <files>находится список файлов или шаблонов, в которых вы хотите произвести подстановку.

jcollado
источник
обратите внимание, что argdo не POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
Стивен Пенни,
0

Вы можете использовать Vim в режиме Ex:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % выбрать все строки

  2. s замена

  3. g заменить все экземпляры в каждой строке

  4. x сохрани и закрой

Стивен Пенни
источник