Мне нужно найти домен (domain1.it) и заменить его другим доменом (domain2.com), во многих файлах, очень много.
Я пробовал с
sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \;
, но оказался медленным, долгим долгим процессом, так как все файлы поиска появляются на экране, а также не позволяют работать с другими командами.
Что-то более быстрое, может быть, с помощью grep, или я не знаю, существует, чтобы сделать то, что мне нужно?
Спасибо
Без параметра -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
, если это требуется для владения файлом / разрешений