如何在不创建sed中间文件的情况下替换?

时间:2011-07-31 12:05:54

标签: linux unix sed

我正在使用Unix sed命令进行一些实践。我在文件中尝试替换和追加命令。但困难在于,我必须创建一个中间文件,然后执行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

文件已删除!

3 个答案:

答案 0 :(得分:16)

试试这个 -

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

-i''用于提供备份文件。如果您确信您的替换不会导致问题,您可以将''传递给没有备份文件

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

答案 1 :(得分:13)

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

执行操作时file1 > file1实际发生的是,文件打开并且截断 之前的程序(将其名称作为参数)来自于阅读任何内容。

<强>更新

sed的手册页在-i选项中说明了以下内容(感谢Delan提及它):

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if extension supplied)

答案 2 :(得分:1)

sed -i.bak的/导演/画家/'file1

 -i[SUFFIX], --in-place[=SUFFIX]

    edit files in place (makes backup if extension supplied)