如何在sed中不创build中间文件进行replace?

我正在用Unix sed命令做一些实践。 我正在尝试replace和附加命令,在一个文件中。 但是难点是,我必须创build一个中间文件,然后执行mv将其重命名为原始文件。

有没有办法在同一个文件中一次完成?

 [root@dhcppc0 practice]# sed '1i\ > Today is Sunday > ' file1 > file1 [root@dhcppc0 practice]# cat file1 [root@dhcppc0 practice]# 

该文件被删除!

 [root@dhcppc0 practice]# sed 's/director/painter/' file1 > file1 [root@dhcppc0 practice]# cat file1 

该文件被删除!

GNU sed知道一个选项-i ,它对给定文件进行就地编辑。

当执行一个操作file1 > file1 ,实际发生的事情是,在程序(获取它的名称作为参数) 之前 ,文件被shell 打开截断然后从中读取任何内容。

更新

sed的手册页在-i选项中声明如下(感谢德兰提到它):

  -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) 

尝试这个 –

 sed -i '' 's/originaltext/replacementtext/g' filename | cat filename 

-i“是为了提供备份文件。 如果您确信您的更换不会导致问题,您可以将“”传递给备份文件

/ g用于全局替换。 如果你在一行中有多个原始文本,那么用/ g选项将会替换所有其他的只替换第一个。

sed -i.bak的/ director / painter /'file1

  -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied)