Самый простой способ добавить значение переменной оболочки в sed
и не беспокоиться о том, как нужно будет изменить экранирование обратной косой черты для остальная часть вашего сценария sed
заключается в том, чтобы поместить все в одинарные кавычки , кроме переменной, и поместить это в двойные кавычки.
Все следующие примеры кода предполагают: VALUE = 'foo \ ([az] \ + \)'
Следующий неработающий код не работает, потому что переменная VALUE
не раскрывается:
sed 's/"${VALUE}"/foo happy \1/' test.txt
Следующий неработающий код не работает, потому что обратная косая черта на \ 1
съедается оболочкой (потому что она заключена в двойные кавычки, а не в одинарные) перед sed
когда-либо видит это:
sed "s/${VALUE}/foo happy \1/" test.txt
Следующий код работает, как ожидалось:
sed 's/'"${VALUE}"'/foo happy \1/' test.txt
Следующий код также работает:
sed "s/${VALUE}/foo happy \\1/" test.txt
То же самое:
sed s/"${VALUE}"/foo\ happy\ \\1/ test.txt
Но зачем усложнять? Одиночные кавычки вокруг сценария sed
делают все намного понятнее, особенно для гуру, не связанного со сценариями оболочки, читающего ваш код. Мой любимый способ - снова отказаться от одинарных кавычек до двойных кавычек только для расширения переменной и сразу вернуться к одинарным кавычкам:
sed 's/'"${VALUE}"'/foo happy \1/' test.txt