1

sed$ ドル記号を含む文字列を含む変数があり、それを使用してテキスト ファイルを変更したいと考えています。変数にドル記号がある場合は常にエラーが発生しますが、ドル記号がない場合は正常に機能します。どうすればこれを修正できますか? 1 つの二重引用符で複数の変数とリテラル テキストを使用しています。

コード:

sudo sed -i "textFile.txt" -e "s,\($var1\):\(.*:\):,\1:$var2WithDollarSign:$var3,g" textfile.txt
4

2 に答える 2

0

あなたの問題は、コマンド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オプションです。スクリプトが実行しているものを表示するだけです。

于 2013-04-09T14:21:42.403 に答える