SEDを使用して現在の変数の一部をユーザー入力変数に置き換える

SEDを使用して現在の変数の一部をユーザー入力変数に置き換える

次のように、既存の変数の一部のみを新しいユーザー入力変数に置き換えようとします。

#Current Variable:
gdbName=Test.MY.DOMAIN.COM <--I need to replace the "Test" (This can be any other string not just Test e.g. CDB79 etc.) part only in this variable with new user input variable. 

#New user input variable:
read -p "Enter CDB Name : "  CDBName

#I tried the following line:
sed -i "s/gdbName=*.MY.DOMAIN.COM/gdbName=$CDBName/" somefile.txt

しかし、これは変数全体を置き換えます。

どんな提案がありますか?

注:ファイルの変数を更新しています。

ベストアンサー1

いくつかの行を含むファイルを修正したいとしましょう。

gdbName=Test.MY.DOMAIN.COM

まあ、これは以下を使って行うことができます。

sed "s/^\(gdbName\)=Test\./\1=$CDBName./" somefile

または、より一般的でなければならず、文字列を指定しない場合は、ドットを含まないすべての文字列Test(空の文字列を含む)と一致させることができます。

sed "s/^\(gdbName\)=[^.]*\./\1=$CDBName./" somefile

このコマンドは、行の先頭(最初の点まで)を変数名(文字列)gdbName、等号、およびシェル変数の値に置き換えますCDBName

ユーザー入力には、特殊なバックスラッシュでエンコードされた文字シーケンスまたはが含まれてCDBNameいないと想定されます。&/sed

どちらの場合も、シェルスクリプトは名前付き変数を定義する必要はありませんgdbName

sed明示的に一致を要求して交換したため、ドメイン名の末尾の部分を削除しようとしました。

おすすめ記事