我有一个名为const.lib
的文件,其中包含参数和密码。
我的文件如下所示,我希望我的DB-admin更新分配给参数vORAPASS
的密码(我不知道),而无需手动编辑我的文件。
if [[ $ZONE = "developement" ]]
then
declare -rx vLEVEL=DEV
declare -rx vORACONSTR=run.dev.zone
declare -rx vSORAUSER=master
declare -rx vORAPASS=KNOWNPASSWD
declare -rx vORASCHEME=master
...
elif [[ $ZONE = "test" ]]
then
declare -rx vLEVEL=TINT
declare -rx vORACONSTR=run.tint.zone
declare -rx vSORAUSER=master
declare -rx vORAPASS=UNKNOWNPASSWD
declare -rx vORASCHEME=master
elif [[ $ZONE = "production" ]]
then
declare -rx vLEVEL=PROD
declare -rx vORACONSTR=run.prod.zone
declare -rx vSORAUSER=master
declare -rx vORAPASS=UNKNOWNPASSWD
declare -rx vORASCHEME=master
...
fi
我如何使用sed来改变第三次出现? 提前THX:)
答案 0 :(得分:1)
使用sed
和反向引用:
sed -r 's/(vORAPASS)(=.*)/\1=MY_NEW_PASS/' const.lib
或者没有回复:
sed 's/vORAPASS=.*/vORAPASS=MY_NEW_PASS/' const.lib
或使用awk
:
awk 'BEGIN{FS=OFS="="}/vORAPASS/{$2="NEW_PASS"}1' const.lib
替换vORAPASS
的第三次出现您可以使用:
awk '/vORAPASS/{c++ ;if(c == 3) gsub(/vORAPASS=.*/,"vORAPASS=MY_NEW_PASS")}1' const.lib
declare -rx vORACONSTR=run.prod.zone
declare -rx vSORAUSER=master
declare -rx vORAPASS=UNKNOWNPASSWD #<----------1st its not
declare -rx vORASCHEME=master
declare -rx vORAPASS=UNKNOWNPASSWD #<----------2nd its not
declare -rx vORAPASS=MY_NEW_PASS #<---------3rd replaced
进行原地替换:检查您的awk
版本,在版本4+中支持原位置换sed
。如果awk
中没有现场替换,则:
awk '/vORAPASS/{c++ ;if(c == 3) gsub(/vORAPASS=.*/,"vORAPASS=MY_NEW_PASS")}1' const.lib > temp && mv temp const.lib
答案 1 :(得分:0)
@PS,谢谢你的支持,我的问题现在已经彻底解决了:)