文件中有两个相同的字符串,但需要替换第二个字符串中的单词
Two same string in file but need replace the word in second string
我的文件中包含以下字符串。
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
使用 bash 方法,我想将第二个“undotbs01.dbf”替换为另一个名称。当我用 grep 和 sed 完成它时,它会将文件中的所有 undotbs01 单词更改为新值。但我只需要更改第二个 undotbs(位于“TO”字之后)。
sed
back-references我的建议是:
$ cat in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
$ sed -e "s,\(.*/\).*\(dbf.*\),newname.," < in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/newname.dbf';
这使用了第一个 .*
模式的贪心(即它希望尽可能多地匹配)。
建议 awk
脚本:
awk 脚本:
awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123"
结果:
awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123" <<< $(echo "ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';")
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '123';
说明:
将替换字符串放入 str="value"
或变量名 $var str="$var"
说明
FS="'"
将 awk
字段分隔符设置为 '
OFS="'"
将 awk
输出字段分隔符设置为 '
sub(".*",str,$(NF-1))
substitute/replace 值(最后一个字段 - 1)和 str
值。最后一个字段$FN
是终止符;
使用sed
sed 's/undotbs01\.dbf/new_value/2' input_file
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/new_value';
我的文件中包含以下字符串。
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
使用 bash 方法,我想将第二个“undotbs01.dbf”替换为另一个名称。当我用 grep 和 sed 完成它时,它会将文件中的所有 undotbs01 单词更改为新值。但我只需要更改第二个 undotbs(位于“TO”字之后)。
sed
back-references我的建议是:
$ cat in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
$ sed -e "s,\(.*/\).*\(dbf.*\),newname.," < in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/newname.dbf';
这使用了第一个 .*
模式的贪心(即它希望尽可能多地匹配)。
建议 awk
脚本:
awk 脚本:
awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123"
结果:
awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123" <<< $(echo "ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';")
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '123';
说明:
将替换字符串放入 str="value"
或变量名 $var str="$var"
说明
FS="'"
将 awk
字段分隔符设置为 '
OFS="'"
将 awk
输出字段分隔符设置为 '
sub(".*",str,$(NF-1))
substitute/replace 值(最后一个字段 - 1)和 str
值。最后一个字段$FN
是终止符;
使用sed
sed 's/undotbs01\.dbf/new_value/2' input_file
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/new_value';