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


11

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

Ответы:


19

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

sed -i 's/dog/cat/' *.txt

1
Просто и приятно.
Луис Альварадо

1

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

sed s/cat/dog/ <input >output

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


1

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

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

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


обратите внимание, что 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 сохрани и закрой

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.