Вы должны быть довольно осторожны с использованием цитат.Вам также необходимо научиться выполнять несколько операций за один проход и / или использовать каналы.
emsurl=tcp://myserver:3243
emsuser=test
emspasswd=new
sed -e "s%\$URL%${emsurl}%g" \
-e "s%\$USER%${emsuser}%g" \
-e "s%\$PASWRD%${emspasswd}%g" check.txt >final.txt
Ваша проблема в том, что оболочка расширила '$ URL' в командной строке (возможно,ничего), что означает, что sed
должен увидеть что-то другое, чем вы хотели.Если экранировать $
с помощью \
, sed
увидит, что вы хотели.
Обратите внимание, что я изначально использовал /
в качестве разделителя в операциях замены;однако, как справедливо указывает DarkDust , это не будет работать, поскольку в URL-адресах есть косые черты.Мой обычный резервный символ - %
- как сейчас показано - но он может появляться в некоторых URL-адресах и может не подходить.Я бы, вероятно, использовал контрольный символ, такой как control-A, если бы мне пришлось беспокоиться об этом - или я бы использовал Perl, который мог бы играть без запутывания.
Вы также можете комбинироватьтри отдельных -e
выражения в одно с заменой их точкой с запятой.Однако я предпочитаю четкость трех операций, четко разделенных.