【发布时间】:2022-11-22 01:22:28
【问题描述】:
我有一个包含以下内容的文本文件:
--abcdef12 --
February April January
January March January
January January January
--abcdef12 --
如何使用 sed 将文件中最后一次出现的一月更改为七月?
所需的输出:
--abcdef12 --
February April January
January March January
January January July
--abcdef12 --
我试过 https://linuxhint.com/use-sed-replace-last-occurrence/ - 下面是输出:
sed '$ s/January/July/' test.txt
--abcdef12 --
February April January
January March January
January January January
--abcdef12 --
sed 's/\(.*\)January/\1July/' test.txt
--abcdef12 --
February April July
January March July
January January July
--abcdef12 --
我也很想知道为什么以上两个选项不起作用!
【问题讨论】:
-
sed逐行工作,因此sed 's/(.*)January/\1July/' test.txt在每行中找到最后一次出现的January。sed '$ s/January/July/'在最后一行搜索January,那里没有January。如果您的sed是 GNU,请使用sed -z 's/\(.*\)January/\1July/' file.txt。 -
谢谢!如何使其内联并更新同一文件? -i 选项似乎不能与 -z 一起使用。 sed:-e 表达式 #1,字符 42:“s”命令的 RHS 上的无效引用 \1
-
如果我使用相同的文件,使用 tee 或 > 重定向会给我一个空文件。否则我必须保存到临时文件中并将其复制回来。
标签: sed