我正在尝试编写一个bash脚本,该脚本将从生产到开发主机执行基于备份的DUPLICATE数据库(Oracle)。其中一个步骤是获取Production数据库pfile的副本,正确编辑它,然后在另一个主机上启动新实例。我在bash脚本上执行以下操作时遇到了困难:
生产pfile :(以单行为例,所有其他都相同)
*.audit_file_dest='/u01/app/grid/admin/orcl11/adump'
假设上述行应完全改为:
*.audit_file_dest='/u02/another/path'
我已经看过StackOverflow上的示例,但我真的无法理解它们。有人可以帮我吗?
非常感谢提前!
答案 0 :(得分:2)
如果它与您在问题中粘贴完全一样,则可以使用sed
代替:
sed -i "s@audit_file_dest='/u01/app/grid/admin/orcl11/adump'@audit_file_dest='/u02/another/path'@" your_file
答案 1 :(得分: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'