あなたの問題は、コマンドsudo
を実行するために実行していることだと思いますsed
:
sudo sed -i "textFile.txt" -e "s,\($var1\):\(.*:\):,\1:$var2WithDollarSign:$var3,g" textfile.txt
問題は、使用しているシェルが引数を 1 回処理した後、sudo
代わりに実行されるシェルが引数を 2 回処理することです。sed
コマンドを含み、シェル変数を設定するシェル スクリプトを作成し、それを から実行することをお勧めしsudo
ます。
cat > script <<!
sed -i "textFile.txt" -e 's,\($var1\):\(.*:\):,\1:$var2WithDollarSign:$var3,g' textfile.txt
!
sudo sh -x script
rm -f script
それは多くの脳力を節約します。
例
$ cat xx.sh
var1='theperson'
var2WithDollarSign='the$voodoo$wizard'
var3='Albuquerque'
cat > script <<!
sed -i "textFile.txt" -e 's,\($var1\):\(.*:\):,\1:$var2WithDollarSign:$var3,g' textfile.txt
!
cat script
rm -f script
$ sh xx.sh
sed -i "textFile.txt" -e 's,\(theperson\):\(.*:\):,\1:the$voodoo$wizard:Albuquerque,g' textfile.txt
$
と交換su sh -x script
しましたcat script
。その置換を元に戻します。は-x
オプションです。スクリプトが実行しているものを表示するだけです。