2012-12-11 14 views
3

Я хотел бы использовать sed для замены в файлах заполнителей, написанных следующим образом: $$ placeholder $$ с содержимым переменной.

Возможно ли это?

Это то, что я пробовал:

sed -i "" -e 's/\$\$placeholder\$\$/$o/g' test.txt 

Половина рабочего заменить $$ заполнитель $$ на $ о вместо содержимого переменной $ O

sed -i "" -e "s/\$\$placeholder\$\$/$o/g" test.txt

Не соответствие любой от $$ placeholder $$ в моем тексте

Спасибо заранее.

Кирилл

ответ

1

Вы можете использовать:

sed 's/\$\$placeholder\$\$/'"$o"'/g' 
+0

Я нашел это используется в Интернете, но я думаю, что он ломается, когда '$ o' содержит sed-специфичные символы, такие как'/', который в этом случае является разделителем – Raffaele

+0

sed позволяет использовать разные разделители, такие как' # 'или' | ', если есть вероятность используя '/' в '$ o'. – anubhava

+0

Независимо от того, какой разделитель вы используете, всегда будет возможность разбить 'sed'. Я думаю, что * окончательное решение будет состоять в том, чтобы закодировать замену – Raffaele

0

Вы можете добавить простые кавычки $o:

sed -i "" -e 's/\$\$placeholder\$\$/'$o'/g' test.txt 
+3

Это нарушает 'sed', если' $ o' содержит косые черты или какой-либо другой значащий sed – Raffaele

1

двойного побег доллара:

sed -i "s/\\$\\$placeholder\\$\\$/$o/g" test.txt 

в случае, если переменный содержит разделитель, вы можете сделать некоторые строки подстановки на нем сначала:

sed -i "s/\\$\\$placeholder\\$\\$/${o//\//\\/}/g" test.txt 
+0

, обратите внимание, что вам не нужно использовать/как разделитель, вы можете использовать любой символ (:,%) –

0

СЭД является прекрасным инструментом для простых замен на одной линии, но все остальное (в том числе с использованием переменной в замещении) просто использовать AWK:

$ cat file 
foo $$placeholder$$ bar 

$ o="hello 
world" 

$ sed 's/\$\$placeholder\$\$/'"$o"'/g' file 
sed: -e expression #1, char 27: unterminated `s' command 

$ awk -v o="$o" '{gsub(/\$\$placeholder\$\$/,o)}1' file 
foo hello 
world bar 

Таким образом, вам не нужно беспокоиться о том, что персонажи sed считают «особыми» или беспорядочными, прыгая назад, а также между командами sed и shell в командной строке, тщательно цитируя разделы вашего скрипта.

Смежные вопросы