我正在用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)