1

ファイルとの間で設定を読み書きするシェル スクリプトを使用して、Linux で構成ファイルを管理する必要がありcfgます。スクリプトで使用される既存の構成ファイルに新しいvalueaを書き込む次の関数があります。key

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

使用法:

set_setting keyname NewValue /home/Config.cfg

したがって、これはkeynameinの値をConfig.cfgに置き換えますNewValue

コマンドをget_setting使用して構成ファイルを読み取る機能もあります。source同様に、2 つのパラメーターkeynameとソース構成ファイルを受け取りvalue、提供されたキーの を返します。

問題は、次のような構成ファイルがあることです。

name=Abc
surname=Xyz

そして、set_setting関数を as として呼び出すとset_setting name Def /home/Config.cfg、理想的には の値をnameからAbcに変更する必要Defがありますが、 key の値を変更するとともにname、 の値もsurnameからXyzに変更し、Def構成ファイルで次のようになります。

name=Def
surname=Def

これは、キーsurnameをに変更したときにsurnames期待どおりに機能し、 の値のみnameが変更されたため、両方のキーで「名前」という用語が共通しているためだと思われます。また、キーの値はスペース以外であれば何でもよいことに注意してください。

私はシェルスクリプトが初めてで、最近発見されたsedコマンドです。

SOの質問thisおよびthisも参照しました。どちらも非常に役に立ちましたが、上記の状況で立ち往生しています。

4

1 に答える 1

2

一致を行の先頭に固定する必要があります。

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

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

于 2012-05-12T15:03:02.223 に答える