0
以下のコマンドで3
の代わりに変数を使用する方法はありますか?変数がsedコマンドで機能しない
sed -i '3s/$/ newvalue/' filename
私は
var=1
sed -i '$vars/$/ newvalue/' filename
sed -i "$vars/$/ newvalue/" filename
以下のコマンドで3
の代わりに変数を使用する方法はありますか?変数がsedコマンドで機能しない
sed -i '3s/$/ newvalue/' filename
私は
var=1
sed -i '$vars/$/ newvalue/' filename
sed -i "$vars/$/ newvalue/" filename
まず試した、あなたはシェルパラメータ/変数を拡張できるようにするために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
うーん、「 'sedのようです$ {var} s/$/newvalue/"filename'は' $ 'の前にエスケープがなくてもうまく動作します – etopylight
この場合、後続の"/"は有効な変数名ではないので動作します。しかし、一般的に二重引用符で "$"をエスケープする必要があります。有効な変数名は、英数字の文字列だけでなく、?、!、#などの特別なシェル変数でもあることを覚えておいてください。 – randomir
これは間違いなくもっと安全な構文です。 – etopylight