我有一个文件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
您的问题涉及“相似”行 - 但没有告诉我们应该如何区分它们。
例如,将 的所有实例替换DATAG
为DATAC2
仅有的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')
它位于文件中的哪个位置并不重要。