ここで興味深い議論を見つけ、与えられた解決策を試しました。sed
ファイルの先頭にテキストを挿入するには?
プレーンテキストには機能しますが、変数にテキストを保存するには機能しません。
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を使用しています:$var
sed
sed
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