sed 機能は、すべての構成ファイル項目を置き換えます。

sed 機能は、すべての構成ファイル項目を置き換えます。

私たちの会社の標準に合わせて設定ファイルを変更するSLES / RHEL用のビルドスクリプトを作成しようとしています。一部の設定は設定=値の形式、一部は設定=値のみです。私は現在sedを使用していますが、ほとんどやってきたような気がしますが、等号がなければ動作しません。

現在のコード:(申し訳ありませんが、まだフォーマットを正しく指定するのに慣れていません...)

$ cat test.conf
setting1 value1 
setting2= value2
setting3 = value3
setting4 =value4 

現在(テスト)機能:

#!/bin/bash
replace () {  
file=$1  
var=$2  
new_value=$3



sed -e "s/^$var=.*/$var = $new_value/" -e "s/^$var =.*/$var = $new_value/" -e "s/^$var.*/$var = $new_value/" -e "s/^$var /$var $new_value/" "$file"|grep $var  

}


replace test.conf setting1 value1new 
replace test.conf setting2 value2new  
replace test.conf setting3 value3new  
replace test.conf setting4 value4new

しかし、私は次のような結果を得ます。

$ ./functiontest
setting1 value1new= value1new 
setting2 value2new= value2new 
setting3 value3new= value3new 
setting4 value4new= value4new

最後のsed部分を取り出すと、等号のある部分でのみ機能します。

何が間違っているのか、どんなアイデアがありますか?

ベストアンサー1

「類似」セットを単純化できます。sed次に変更してください。

cat replace.sh 
#!/bin/bash
replace () {
var=$2  
new_val=$3

sed -e "s/^$var *= *.*/$var = $new_val/; s/^$var [^=]*$/$var $new_val/" "$1" | grep $var 

}

replace test.conf setting1 value1new 
replace test.conf setting2 value2new  
replace test.conf setting3 value3new  
replace test.conf setting4 value4new

使用法:

bash replace.sh

出力:

setting1 value1new
setting2 = value2new
setting3 = value3new
setting4 = value4new

おすすめ記事