Недопустимый код команды., несмотря на периоды побега, используя sed
Принудительно использовать CVS для текущего клиента и изменить адрес для удаленного репо. Единственный способ найти удаленный адрес в локальном коде - это рекурсивный поиск и замена.
Однако с командой sed, которую я ожидал бы работать:
find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;
Я получаю сообщение об ошибке для каждого файла:
sed: 1: ".//file/path ...": invalid command code .
Я пытался избежать периодов в совпадении/замене sed, но это ничего не решает.
Ответы
Ответ 1
Если вы находитесь на OS X, это, вероятно, не имеет ничего общего с командой sed. В версии OSX sed
параметр -i
ожидает аргумент extension
, поэтому ваша команда фактически анализируется как аргумент extension
, а путь к файлу интерпретируется как код команды.
Попробуйте добавить аргумент -e
явно и давая ''
в качестве аргумента -i
:
find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;
См. .
Ответ 2
Вы просто забыли указать аргумент -i
. Просто измените -i
на -i ''
.
Конечно, это означает, что вы не хотите, чтобы ваши файлы были скопированы; в противном случае укажите свое расширение, например -i .bak
.
Ответ 3
Возможно, ваш новый домен содержит /
? Если это так, попробуйте использовать разделитель, отличный от /
в sed
, например. #
, ,
и т.д.
find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \;
Было бы также полезно заключить s///
в одинарной кавычки, а не в двойную кавычку, чтобы избежать замены переменных или любого другого непредвиденного поведения