2017-11-19 8 views
0

以下のコマンドで3の代わりに変数を使用する方法はありますか?変数がsedコマンドで機能しない

sed -i '3s/$/ newvalue/' filename 

私は

var=1 
sed -i '$vars/$/ newvalue/' filename 
sed -i "$vars/$/ newvalue/" filename 

答えて

2

まず試した、あなたはシェルパラメータ/変数を拡張できるようにするためにdouble quotesを使用する必要があります。変数に続くテキストが変数名(before${var}after)の一部として解釈される場合は、braces to isolate the variable nameを使用する必要があります。最後に、二重引用符でリテラル$を使用するには、それをブラックスラッシュからエスケープする必要があります。すべて一緒:

var=3 
sed -i "${var}s/\$/ newvalue/" filename 

1つの選択肢は、(その下に何の文字がパラメータ展開のための$含めて、特別扱いされていない)、ダブルとシングル引用符を交互に使用することです:

sed -i "$var"'s/$/ newvalue/' filename 
+0

うーん、「 'sedのようです$ {var} s/$/newvalue/"filename'は' $ 'の前にエスケープがなくてもうまく動作します – etopylight

+1

この場合、後続の"/"は有効な変数名ではないので動作します。しかし、一般的に二重引用符で "$"をエスケープする必要があります。有効な変数名は、英数字の文字列だけでなく、?、!、#などの特別なシェル変数でもあることを覚えておいてください。 – randomir

+1

これは間違いなくもっと安全な構文です。 – etopylight

関連する問題