文件中有两个相同的字符串,但需要替换第二个字符串中的单词

发布于 2025-01-18 04:43:36 字数 278 浏览 1 评论 0原文

我的文件中包含以下字符串。

ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';

使用 bash 方法,我想将第二个“undotbs01.dbf”替换为另一个名称。当我使用 grep 和 sed 执行此操作时,它将文件中的所有 undotbs01 单词更改为新值。但我只需要更改第二个undotbs(位于“TO”字之后)。

I have file which contain below string in file.

ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';

With bash methods I want to replace second "undotbs01.dbf" to another name. When I did it with grep and sed it changes all undotbs01 words in file, to the new value. But I need only second undotbs (which located after "TO" word) to be changed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦毁影碎の 2025-01-25 04:43:36

使用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';

Using 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';
蓝眼睛不忧郁 2025-01-25 04:43:36

对于 sed 反向引用,这就是我的建议:

$ cat in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
$ sed -e "s,\(.*/\).*\(dbf.*\),\1newname.\2," < in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/newname.dbf';

这使用第一个 .* 模式的贪婪性(即它希望尽可能多地匹配)。

With sed back-references this is what I suggest:

$ cat in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
$ sed -e "s,\(.*/\).*\(dbf.*\),\1newname.\2," < in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/newname.dbf';

This uses the greedyness of the first .* pattern (i.e. it wants to match as much as possible).

多彩岁月 2025-01-25 04:43:36

建议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 =“'” set awk field saparator to '

ofs =''''“” set awk输出字段分隔符至'

sub(“。字段-1)带有str值。最后一个字段$ fn是终止;

Suggesting an awk script:

awk script:

awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123"

results in:

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';

instructions:

Put replacement string in str="value" or variable name $var str="$var"

Explanation

FS="'" set awk field separator to '

OFS="'" set awk output field separator to '

sub(".*",str,$(NF-1)) substitute/replace value of (last field - 1) with str value. The last field $FN is the termination ;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文