sedを使用してシェル変数に格納されているテキストをファイルの先頭に追加するにはどうすればよいですか?

sedを使用してシェル変数に格納されているテキストをファイルの先頭に追加するにはどうすればよいですか?

ここで興味深い議論を見つけ、与えられた解決策を試しました。sed

ファイルの先頭にテキストを挿入するには?

https://stackoverflow.com/a/9533736/13353532

プレーンテキストには機能しますが、変数にテキストを保存するには機能しません。

wolf@linux:~$ cat file.txt 
1
2
3
wolf@linux:~$ 

<added text>ファイルの先頭にテキスト()を追加します。

wolf@linux:~$ sed -i '1s/^/<added text>\n/' file.txt
wolf@linux:~$ 

効果がある!

wolf@linux:~$ cat file.txt 
<added text>
1
2
3
wolf@linux:~$ 

しかし、変数を使って試してみると、もう機能しません。

wolf@linux:~$ var='Text 1'
wolf@linux:~$ echo $var
Text 1
wolf@linux:~$ 

wolf@linux:~$ cat file.txt 
1
2
3
wolf@linux:~$ sed -i '1s/^/"$var"\n/' file.txt
wolf@linux:~$ cat file.txt 
"$var"
1
2
3
wolf@linux:~$ 

除いて、コマンドから実際の値をどの"$var"ように呼び出すのですか?私はGNU 4.7を使用しています:$varsedsed

sed (GNU sed) 4.7 Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.

答え1

問題は、提案されているようにsed説明を一重引用符で囲んだことです' ... '。しかし、一重引用符の中では変数拡張が$var無効になっています。、表現はそのまま残ります。

解決策として、説明を二重引用符で囲むことができます。

sed -i "1s/^/$var\n/" file.txt

ただし、この目的には「挿入」コマンドを使用することをお勧めします。

sed -i "1i $var" file.txt

内容は行1の前に挿入されます$var

編集する

@DigitalTraumaがコメントで正しく指摘したように、(不要な)拡張から「変数を除くすべて」を保護するには、混合参照で連結された文字列パラメータを使用できますが、sコマンドでは不可能です。例の主なパラメータです。

sed -i 's/^/'"$var"'\n/' file.txt

関連情報