Как написать сложный запрос sed со специальным символом

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

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

Строка для поиска: ../../../ profileone Строка для замены: @ mysettings / future-system-one

Запрос:

sed -i s/"../../../profileone"/"@mysettings/future-system-one"/g *.fileExtension'

Я хотел попробовать эту команду из конвейера Дженкинса.

2
задан 22 May 2021 в 15:58

2 ответа

На самом деле у вас нет никаких специальных символов, поэтому вам не нужно ничего экранировать.Единственная проблема заключается в том, что вы используете / в качестве разделителя шаблона, поэтому просто используйте другой символ, и он должен работать нормально:

sed 's|../../../profileone|@mysettings/future-system-one|g' *.fileExtension

Обратите внимание, как цитируется команда sed , то есть важный.

Теперь ваш вопрос показывает целевые строки как ../../../ profileone и @ mysettings / future-system-one , но ваша команда также включает двойные цитаты. Если они должны быть частью строк, используйте вместо этого:

sed 's|"../../../profileone"|"@mysettings/future-system-one"|g' *.fileExtension
3
ответ дан 28 July 2021 в 11:37

Следуя комментарию @steeldriver, вы можете изменить разделители шаблонов с / на _ :

sed -i s_"../../../profileone"_"@mysettings/future-system-one"_g *.fileExtension'

, чтобы вам не нужно было экранировать все / таким способом:

sed -i s/"..\/..\/..\/profileone"/"@mysettings\/future-system-one"/g *.fileExtension'
2
ответ дан 28 July 2021 в 11:37

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

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