sedを使用して二重引用符で囲まれた文字列を変数に置き換える方法は?

sedを使用して二重引用符で囲まれた文字列を変数に置き換える方法は?

次の行を含むファイルがあります。

  master_green_cloud_init_version = "v1.16/"

私のbashスクリプトには同様のパラメータがありますuserdata_version=v2.21

(ie)間の内容をどのように変更sedできますか?"""v1.16/"$userdata_version

v1.16変わり続けるのでハードコードできません。

ベストアンサー1

を使用するには、sed説明するシナリオに対して次の入力ファイルが必要です。

master_green_cloud_init_version = "v1.16/"
master_blue_cloud_init_version = "v1.16/"

このスクリプト*

#!/bin/sh
  
userdata_version=v2.21
sed -i -e "/master_green_cloud_init_version/s/\".*\"/\"${userdata_version}\"/" input.txt

明らかにする

$ more input.txt
master_green_cloud_init_version = "v2.21"
master_blue_cloud_init_version = "v1.16/"
$

sedシェル変数を使用するには、式に二重引用符が必要です。こちらをご覧ください。回答到着sed スクリプトのシェル変数

その後、検索している二重引用符もエスケープする必要があります\"。開く二重引用符に1回、閉じる二重引用符に1回、このように2回実行する必要があります。

結果-iを。stdout


ノート:何らかの理由でバージョン文字列の末尾にスラッシュを保持したい場合は、\/次のようにエスケープされたスラッシュ()を使用できます。

#!/bin/sh

userdata_version=v2.21
sed  -e "/master_green_cloud_init_version/s/\".*\/\"/\"${userdata_version}\/\"/" input.txt

同じ入力ファイルに対して、次のように指定されます。

master_green_cloud_init_version = "v2.21/"
master_blue_cloud_init_version = "v1.16/"

*からLinux / Unixシェルでsedを使用してファイル内のテキストを見つけて置き換える方法:

sedを使用して単語を一致させ、検索して置換する方法

この例では、「love」という単語だけが見つかり、行の内容が特定の文字列(たとえばFOO)の場合は「sick」に置き換えられます。

sed -i -e '/FOO/s/love/sick/' input.txt 

また、見ることができますファイル内の文字列を置き換える方法は?

おすすめ記事