我必须更新配置文件中的特定行。我需要更新的行在下面。我想用SERVICE_NAME = NewVaule更新字段SERVICE_NAME = OriginalValue。不幸的是,' OriginalValue'不是固定的字符串。它由字母字符(上部和下部),数字和句点组成。
此外,SERVICE_NAME位于多行,我只想更新其中包含jdbc_url的行。
我试过的项目如下,但我只需要替换第一个括号。
sed -i '/s_apps_jdbc_connect_descriptor/s/SERVICE_NAME.*)/SERVICE_NAME=NewValue/' work.xml
我不知道该怎么办。唯一的要求是该命令可以从bash执行,并使用合理的Linux发行版中的工具。
<jdbc_url oa_var="s_apps_jdbc_connect_descriptor">jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=YES)(FAILOVER=YES)(ADDRESS=(PROTOCOL=tcp)(HOST=myhostname.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=OriginalValue)))</jdbc_url>
答案 0 :(得分:2)
如果你正在寻找一个脚本,请说config_editor
会这样做:
#!/bin/bash
# $1 - new value $2 - /path/to/config_file
if [ ! "$#" -eq 2 ]
then
echo "Usage : ./config_editor new_value /path/to/config_file"
exit 1
elif [ ! -e "$2" ]
then
echo "Config file doesn't exist, please check the path"
exit 1
fi
sed -Ei.bak '/^<jdbc_url/{s/(SERVICE_NAME=)[^)]*\)/\1'"$1"'\)/}' "$2"
# -E enables extended regex for sed, a bit more portable than -r
# -i enables inplace edit but do keep a backup of the original file
# .bak with -i appends a suffix .back to the backup file
将其作为
运行./config_editor new_value /path/to/config_file
答案 1 :(得分:1)
要仅对与模式匹配的行执行替换,请使用模式作为替换命令的地址表达式。
sed '/jdbc_url/s/SERVICE_NAME=OriginalValue/SERVICE_NAME=NewVaule/' filename