我正在使用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
文件已删除!
答案 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)