sed:通过bash脚本正确替换包含路径的行

时间:2012-09-21 08:24:42

标签: bash sed awk

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

生产pfile :(以单行为例,所有其他都相同)

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

假设上述行应完全改为:

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

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

非常感谢提前!

编辑:非常感谢你们。这就像一个魅力。主题回答。

2 个答案:

答案 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'