Будучи вынужденным использовать CVS для текущего клиента, а адрес изменился для удаленного репо. Единственный способ найти удаленный адрес в моем локальном коде - это рекурсивный поиск и замена.
Тем не менее, с командой sed я ожидал работать:
find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;
Я получаю сообщение об ошибке для каждого файла:
sed: 1: ".//file/path ...": invalid command code .
Я пытался избежать периодов в Sed Match / замене, но это ничего не решает.
RE error: illegal byte sequence
на MacOS.sed -i '' 's/blah/xx/g'
-e
после того, как-i
сделалsed
резервную копию всех моих файлов таким образом: "foo.txt" -> "foo.txt-e". Очевидно, что я хотел, а-i ''
не делать резервные копии измененных файлов.-i -e
кfind
тому, что многие файлы заканчивались на-e-e-e-e-e-e-e
.Вы просто забыли предоставить аргумент
-i
. Просто измени-i
на-i ''
.Конечно, это означает, что вы не хотите, чтобы резервные копии ваших файлов; в противном случае поставьте ваше расширение выбора, как
-i .bak
.источник
На OS X ничто не помогает бедному встроенному sedу стать адекватным. Решение:
А затем используйте gsed вместо sed, который будет работать как положено.
источник
Возможно, ваш новый домен содержит
/
? Если это так, то попробуйте использовать разделитель, кроме/
вsed
, например#
, и,
т.д.Также было бы хорошо заключить
s///
в одинарные кавычки, а не в двойные кавычки, чтобы избежать подстановки переменных или любого другого непредвиденного поведения.источник