2012-05-12 10 views
1

cfgファイルの設定を読み書きするシェルスクリプトを使って、Linuxの設定ファイルを管理する必要があります。私はkeyの新しいvalueをスクリプトに使用されている既存の設定ファイルに書き込む機能を持っています。シェルスクリプト経由でsedを使って設定ファイルを管理する

set_setting() { 
    sed -i "s/$1=[^ ]*/$1=$2/" $3 
} 

使用法:

set_setting keyname NewValue /home/Config.cfg

したがって、これはNewValueConfig.cfgkeynameの値を置き換えます。

また、sourceコマンドを使用して設定ファイルを読み取る関数get_settingがあります。同様に2つのパラメータkeynameとソース設定ファイルを受け入れ、指定されたキーのvalueを返します。

今問題は、私は次のように設定ファイルがあります。

name=Abc 
surname=Xyz 

そして、私はset_setting name Def /home/Config.cfgとしてset_setting関数を呼び出すとき、理想的にはDefAbcからnameの値を変更する必要がありますが、キーnameの値を変更するとともに、それはまた、結果としてDefXyzからsurnameの値を変更configファイルで以下のようにします。期待とnameの値だけが変更されたとして

name=Def 
surname=Def 

が、私はこれは私がsurnamesにキーsurnameを変えたときのように、両方のキーに共通する用語「名前」を有することに起因している疑いがある、それが働きました。また、キーの値はスペース以外の任意の値にすることができます。

シェルスクリプトの新機能で、最近発見されたのはsedコマンドです。

私はまた、thisthisの質問にも言及しました。両方ともかなり役に立ちましたが、私は上記の状況に悩まされています。

答えて

2

あなたは、行の先頭にあなたの一致を固定する必要があります

sed -i "s/^$1=[^ ]*/$1=$2/" $3 

$1の前で^に注意してください。この正規表現演算子は、最初の文字から=記号までのすべての名前を効果的に必要とする行の先頭に式を固定します。 $というエンドオブラインアンカーもあります(ここでは必要ありません)。

+0

私は愚かでした。 :-) どうもありがとう! – Kushal

関連する問題