2012-03-20 60 views
4

我想在shell腳本中使用sed替換屬性文件上的屬性;下面列出的命令完美無缺sed忽略行開始於正則表達式

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 
########### 

我試過一些方法,但wasnt成功逃脫開始以 「#」 行了.. 。建議?

回答

5

您可以添加一個條件替換表達:

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

/^[^#]/讀作「一切在該行的開頭英鎊符號」。

0

你可以像線比賽開始啓動該

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

只需添加^,這樣唯一的。上面的ans應該也可以工作,但是如果你的行以space開頭的話就會有同樣的問題。

+0

非常感謝,我會把它作爲一個重要的說明。 – sid 2012-03-20 03:32:13