通过 SED 替换相似措辞的行

通过 SED 替换相似措辞的行

我有一个文件sample_init.ora

文件中有 2 行。

db_create_file_dest="DATAG"
control_files=('DATAG/DBNAME/controlfile/control01.ctl','DATAG/DBNAME/controlfile/control02.ctl')

现在,我只想将第二行从 DATAG 更改为 DATAC2。有办法吗?我尝试了很多 SED/AWK 论坛,但没有任何选择。基于 SED 的回复将受到高度重视。

答案1

您的问题涉及“相似”行 - 但没有告诉我们应该如何区分它们。

例如,将 的所有实例替换DATAGDATAC2 仅有的control_files以您可以使用的字符串开头的行

sed '/^control_files/ s/DATAG/DATAC2/g'

^control_files如果您用其他一些区分模式替换,它应该作为通用方法使用。

答案2

最明显的 sed 解决方案是:

sed 2s/DATAG/DATAC2/g sample_init.ora > new_file.ora

或者就地编辑,如果您的 sed 支持-i

sed -i 2s/DATAG/DATAC2/g sample_init.ora 

sed指令是:

  • 2- 2号线
  • s//- 搜索和替换
  • g- 替换每场比赛,而不仅仅是第一场比赛

答案3

假设这是精确的行将在文件中显示的格式,使用:

sed -i 's/DATAG\//DATAC2\//g' <filename> > <new_filename>

这将起作用,因为第二行中的 DATAG 实例后面有一个“/”,而在第一行中则没有。因此,执行后,您给出的示例将显示:

db_create_file_dest="DATAG"
control_files=('DATAC2/DBNAME/controlfile/control01.ctl','DATAC2/DBNAME/controlfile/control02.ctl')

它位于文件中的哪个位置并不重要。

相关内容