Искать и заменять один домен другим во многих файлах

Мне нужно найти домен (domain1.it) и заменить его другим доменом (domain2.com), во многих файлах, очень много.

Я пробовал с

sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \;

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

Что-то более быстрое, может быть, с помощью grep, или я не знаю, существует, чтобы сделать то, что мне нужно?

Спасибо

0
задан 30 April 2021 в 18:39

1 ответ

Без параметра -i или - in-place ваша команда sed будет выполнять потоковую передачу отредактированный вывод на терминал. Размещение команды в фоновом режиме не изменит этого.

Затем давайте проверим ваше выражение sed s / domain1 \ it / domain2 \ com / g .

Буква i не является специальной в регулярных выражениях sed, поэтому \ i совпадает с i и соответствует символу i буквально. Вы, вероятно, хотели избежать периода, . , чтобы сделать это буквально. Правая часть s / pattern / replacement / - это просто строка, которая вообще не требует специального экранирования. Вероятно, это должно быть:

s/domain1\.it/domain2.com/g

Вы можете ускорить выполнение команды, передав несколько файлов одновременно в sed , заменив {} \; на {} + . Обратите внимание, что {} не нужно указывать в bash или большинстве других распространенных оболочек.

Собираем все вместе:

find '/abc/abc/' -type f -exec sed -i.bak 's/domain1\.it/domain2.com/g' {} +
  • вы можете опустить .bak , если вы уверены, что вам не нужно сохранять резервные копии файлов

  • , вы можете запустить всю команду в фоновом режиме, добавив & как обычно

  • , вы можете запустить команду с sudo , если это требуется для владения файлом / разрешений

2
ответ дан 7 May 2021 в 17:41

Другие вопросы по тегам:

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