Answers:
我认为您正在寻找-i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
例如:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
如果提供后缀,它将创建一个备份文件:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
修改输入文件,并创建包含原始文件数据的备份。
另请注意,这是针对GNU的sed
,不同实现之间的格式略有不同sed
。
sed
不进行就地编辑。它创建一个新文件并覆盖旧文件,inode更改。
{ rm file; cmd > file; } < file
将得出这样的结论,即cmd可以读写同一文件,而事实并非如此。这是两个不同的文件,它们恰好具有相同的名称。但我不想在这里开始讨论。
sed: 1: "foo.txt": invalid command code f
运行sed -i 's/o/X/g' foo.txt
。但是,提供扩展名也sed -i .bak 's/o/X/g' foo.txt
可以。有什么想法如何使它工作而不创建备份文件吗?
sed -i '' 's/o/X/g' foo.txt
这些解决方案适用于HPUX(UNIX):
1。
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh
:
2。
perl -pi -e 's/Error/NO_Error/g' test1.sh
3。
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
-e
标志代表表达。您可能想要-i
标志,in-place
我强烈建议您使用sed -i.bak 's/../' filename