Я пытаюсь заменить строку на особый персонаж. Я использую приведенную ниже команду и пытался экранировать каждый специальный символ, но все равно получаю сообщение об ошибке.
Если я не использую специальные символы, запрос работает нормально, но я должен использовать специальные символы.
Строка для поиска: ../../../ profileone
Строка для замены: @ mysettings / future-system-one
Запрос:
sed -i s/"../../../profileone"/"@mysettings/future-system-one"/g *.fileExtension'
Я хотел попробовать эту команду из конвейера Дженкинса.
На самом деле у вас нет никаких специальных символов, поэтому вам не нужно ничего экранировать.Единственная проблема заключается в том, что вы используете /
в качестве разделителя шаблона, поэтому просто используйте другой символ, и он должен работать нормально:
sed 's|../../../profileone|@mysettings/future-system-one|g' *.fileExtension
Обратите внимание, как цитируется команда sed
, то есть важный.
Теперь ваш вопрос показывает целевые строки как ../../../ profileone
и @ mysettings / future-system-one
, но ваша команда также включает двойные цитаты. Если они должны быть частью строк, используйте вместо этого:
sed 's|"../../../profileone"|"@mysettings/future-system-one"|g' *.fileExtension
Следуя комментарию @steeldriver, вы можете изменить разделители шаблонов
с /
на _
:
sed -i s_"../../../profileone"_"@mysettings/future-system-one"_g *.fileExtension'
, чтобы вам не нужно было экранировать все /
таким способом:
sed -i s/"..\/..\/..\/profileone"/"@mysettings\/future-system-one"/g *.fileExtension'