次のように、既存の変数の一部のみを新しいユーザー入力変数に置き換えようとします。
#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
明示的に一致を要求して交換したため、ドメイン名の末尾の部分を削除しようとしました。