GNU/Linux >> Linux の 問題 >  >> Linux

SedでBash文字列変数への参照を使用しますか?

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

Linux
  1. Bashスクリプト(I)

  2. Sedを使用して、一致する文字列のN番目の位置に文字を追加しますか?

  3. 辞書を使用した文字列の置換?

  1. Sedを使用して文字列の最初の文字をラップしますか?

  2. 変数を使用してBashを使用して複数行の文字列を記述する方法は?

  3. Linux bash、ダッシュで区切るキャメルケース文字列

  1. 文字列の一部のみをBashの変数に割り当てますか?

  2. bash の変数を持つエイリアス

  3. grep と sed を使用して文字列を検索して置換する