2013-06-20 2 views
1

Я хочу, чтобы переменная SERVICE была заменена на строку $ service. Я использовал СЭД для негоЗамена строки с помощью sed, которая имеет много разных символов

sed "s/SERVICE/$service/g"

Проблема заключается в том, что переменные $ служба имеет специальные символы, такие как», [,], /, \",? `И подобные. Последовательность специальных символов в $ service не фиксируется. И всякий раз, когда есть специальный символ, например «внутри $ service», sed не может его правильно заменить. Есть ли какое-либо решение, в котором специальные символы не будут мешать процессу замены sed. Ответ дается ниже, не работает для меня, это говорит

sed: -e expression #1, char 107: unknown option to `s' 
+0

Можете ли вы привести несколько примеров значения переменной $ service. – anubhava

ответ

3

Попробуйте сделать это:

sed "[email protected]@$(printf '%q' "$service")@g" 
  • @ альтернативный модификатор, который может быть любой символ
  • printf '%q' избежать данное строка для оболочки:

Ex.

$ printf '%q' '*$!' 
\*\$\! 
+0

Но что, если переменная '$ service' содержит символ' @ '? Кроме того, 'printf '% q'' может ответить на что-то с' $' ... ''. Это только гарантирует, что он может быть повторно использован оболочкой. –

+0

Например, 'printf '% q' 'é'' удивляет. –