1

我正在尝试编写一个 bash 脚本,它将执行从生产主机到开发主机的基于备份的 DUPLICATE 数据库 (Oracle)。其中一个步骤是获取生产数据库 pfile 的副本,对其进行正确编辑,然后在另一台主机上启动新实例。我在我的 bash 脚本上执行以下操作时遇到了困难:

生产pfile:(以单行为例,其他都一样)

*.audit_file_dest='/u01/app/grid/admin/orcl11/adump'

假设上面的行应该完全更改为:

*.audit_file_dest='/u02/another/path'

我看过 StackOverflow 上的示例,但我真的无法理解它们。有人可以帮我吗?

提前谢谢了!

编辑:非常感谢大家。这就像一个魅力。话题回答。

4

2 回答 2

2

如果它与您在问题中粘贴的完全一样,您可以使用sed来替换:

sed -i "s@audit_file_dest='/u01/app/grid/admin/orcl11/adump'@audit_file_dest='/u02/another/path'@" your_file
于 2012-09-21T08:30:23.670 回答
0

如果您只需要更改问题中的单行,@leafei 的行适合您。

如果您想自定义“pfile”,例如:更改

nameA='oldA'
nameB='oldB'
nameC='oldC'

nameA='newA'
nameB='oldB' #here perhaps you want to keep the old value
nameC='newC'

你可以试试这个:

awk  'BEGIN{s="\x27";FS=OFS="="}{if($1=="nameA"){print $1,s"newA"s;next;} if($1=="nameC"){print $1,s"newC"s;next;}}1' pfile

测试

kent$  echo "nameA='oldA'
nameB='oldB'
nameC='oldC'"|awk  'BEGIN{s="\x27";FS=OFS="="}{if($1=="nameA"){print $1,s"newA"s;next;} if($1=="nameC"){print $1,s"newC"s;next;}}1'
nameA='newA'
nameB='oldB'
nameC='newC'
于 2012-09-21T08:56:04.227 回答