2014-10-22 60 views
1

我是bash脚本的新手,我试图编写一个bash脚本来编辑配置文件。我想从文件中删除“foo”。一行bash脚本编辑文件(不是创建一个新的)

使用代码

echo 
sed -e "s/ foo//" ./test > ./test2 

将创建一个我想要的内容的新文件。但如果我尝试使用此编辑相同的文件

echo 
sed -e "s/ foo//" ./test > ./test 

该文件将只是变空。这不是这样吗?我怎样才能简单地编辑一个文件?谢谢。

回答

2

这是-i开关是什么:编辑就地:

sed -i -e "s/ foo//" ./test 

-i开关在man sed记载:

-i [后缀],--in位置[=后缀]
编辑文件到位(使备份,如果扩展提供)

对于GNU sed(linux),省略后缀时不会创建备份。对于sed的其他版本,可能必须提供备份后缀。

+0

It Works!谢谢 – 2014-10-22 04:18:23

1

空文件

壳牌打开文件test写作 - >清除其所有以前的内容。

如何编辑同一文件

解决方案1: - 直列变化

sed -i.bk "s/ foo//" ./test 

解决方案2: - 使用中间文件(以前CMD的手动版本)

sed -e "s/ foo//" ./test > test.bk && mv test.bk test 
+0

啊我明白了。 :D谢谢! – 2014-10-22 04:18:57

1

桑达是一个编辑器,不是文本编辑器。使用'-i'参数不是POSIX,再加上在替换原始文件之前创建临时文件的开销。

如果你想真正地编辑你的文件,你应该使用ed/ex来代替。

ex -sc '%s/ foo//g|xit' ./test 

请参见手册页sed(1p),ed(1p)和ex(1p)。

相关问题