私は比較的Linuxの初心者です。テキストファイルa.txt
があるとします。 次のテキストが含まれています:
A
B
C
ここで、2行目のテキスト(B
を含む)を変更したい場合 )、次のsed
を使用できます コマンド:
sed -i '2s/^.*$/X/' a.txt
B
を変更するには X
へ 、たとえば。
しかし、今、私がsed
を書きたいとしましょう。 2行目のテキストを含むものに変更するコマンド bash文字列変数。 2行目のテキストをfname="myaddress"
に変更したい 、引用符が明示的に含まれている場合、およびmyaddress
bash文字列変数です (どこかで定義されています)。これを行うために、mytest.sh
というbashシェルスクリプトを作成しました。 以下を含みます:
#!/bin/bash
myaddress="/home/"
echo fname="$myaddress"
head a.txt
sed -i '2s/^.*$/fname="$myaddress"/' a.txt
head a.txt
さて、echo fname="$myaddress"
fname="/home/"
を出力します 、これは私が欲しいテキストです a.txt
の2行目にあります 。ただし、sed
代わりに、fname="$myaddress"
を出力します a.txt
の2行目へ おそらく、周囲のアポストロフィの内側にあるためです。つまり、上記のbashシェルスクリプトの出力は次のとおりです。
fname="/home/"
A
B
C
A
fname="$myaddress"
C
私の質問は、どうすればsed
を入手できるかということです。 値を実際に印刷するには myaddress
に保存 $myaddress
によって参照されます ?
承認された回答:
2つの問題があります。1つは、Kevinがすでに指摘したように、シェル変数をシェルで展開する場合は、シェル変数を二重引用符で囲む必要があります。次に、置換文字列に/
が含まれています 、したがって/
は使用できません sed
の区切り文字と同時に 。ある文字を知っている場合は、,
と言います 、置換文字列では絶対に発生しません。その文字をsed
として使用できます。 区切り文字なので、取得します
sed -i '2s,^.*$,fname="'"$myaddress"'",' a.txt