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

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

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

решение1

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

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

решение2

На ум приходит sed. Пример:

sed s/cat/dog/ <input >output

Эта функция ищет слово cat в строке и помещает слово dog на его место в файле input, а затем записывает его в файл output.

решение3

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

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

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

решение4

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

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

  2. sзаменять

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

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

Связанный контент