2012-03-20 9 views
4

シェルスクリプトでsedを使用してプロパティファイルのプロパティを置き換えようとしています。以下のコマンドは完全に正常に動作しますsed regexで始まる行を無視する

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

問題 - この男は、コメントにも一致する "KEY"を置き換えます。

例ファイル:

########### 
#ws.clients=http://abc123.com 
ws.clients=http://123.com 
########### 

スクリプト:

#!/bin/ksh 
KEY="ws.clients" 
NEWVAL="http://abcd.com" 
sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

出力:

########### 
#ws.clients=http://abcd.com 
ws.clients=http://abcd.com 
########### 

私はいくつかの方法を試してみましたが、波平成功した "#" で始まる行をエスケープで.. 。提案?

答えて

5

あなたは置き換える式に条件を追加することができます

sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

/^[^#]/は「すべてしかし行の先頭にポンド記号」として読み込みます。

0

あなたがラインマッチの先頭からこの

sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

だけ追加^ので、唯一のもののように行うことができます。あなたの行がspaceで始まっていれば、ansもうまくいくはずですが、同じ問題があります。

+0

ありがとう、私は重要なメモとしてそれを取る。 – sid

関連する問題