1

次の形式のプロパティ ファイルが 1 つあります (ファイルの名前は oldProperties.properties とします)。

group1.value1=Hello
group1.value2=World
group1.value3=BlaBla
group1.vlaue4=blabla2

ここで、プロパティ ファイルの特定の値を変更して新しいファイルを作成するスクリプトを開発したいと考えています。スクリプトは、プロパティの propertyName と newValue をコマンド ライン引数として受け取る必要があります。

changePropertyValue.ksh group1.value3 GoodBye

結果ファイル (newProperties.properties など) は次のようになります。

    group1.value1=Hello
    group1.value2=World
    group1.value3=GoodBye
    group1.vlaue4=blabla2

これを行うために、これらのコード行を changePropertyValue.ksh に記述しました。

property_name=$1
new_value=$2

old_properties=oldProperties.properties
new_properties=newProperties.properties

echo "" > $new_properties

cat $old_properties |  awk 'BEGIN{ FS="=";OFS="=" } {if($1=="$property_name") $2="$new_value"; print $0;}' >> $new_properties

私はこれを起動しています

changePropertyValue.ksh group1.value3 GoodBye 

そして今、新しいPropertiesファイルでgrepを実行すると、古い値が取得されます。つまり

grep group1.value3 newProperties.properties
output 
group1.value3=BlaBla

同時に、コマンドラインでawkコマンドを直接起動すると、正常に動作します。つまり、これを起動すると

cat oldProperties.properties |  awk 'BEGIN{ FS="=";OFS="=" } {if($1=="group1.value3") $2="GoodBye"; print $0;}' | grep group1.value3

output is :-
group1.value3=GoodBye

スクリプトを書いているときに私が間違っていることを誰か教えてください。

ありがとう

4

2 に答える 2

2

もう 1 つの方法は、 の値を$property_name変数としてに渡すことawkです。

awk 'BEGIN{ FS="=";OFS="=" } {if($1==pname) $2=newval; print $0;}' pname="$property_name" newval="$new_value" $old_properties >> $new_properties
于 2012-08-08T14:12:37.230 に答える
2

awkプログラム ( ) を一重引用符で囲むと、awk 'BEGIN...'が展開されなくなり$property_nameます。awk呼び出しを次のように変更します。

cat $old_properties |  awk "BEGIN{ FS=\"=\";OFS=\"=\" } {if(\$1==\"$property_name\") \$2=\"$new_value\"; print \$0;}" >> $new_properties

外側の単一引用符が二重引用符に置き換えられ、元のすべての二重引用符が でエスケープされていることに注意してください\

于 2012-08-08T13:40:38.960 に答える