私たちの会社の標準に合わせて設定ファイルを変更する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