私は比較的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