我是bash脚本的新手,我试图编写一个bash脚本来编辑配置文件。我想从文件中删除“foo”。一行bash脚本编辑文件(不是创建一个新的)
使用代码
echo
sed -e "s/ foo//" ./test > ./test2
将创建一个我想要的内容的新文件。但如果我尝试使用此编辑相同的文件
echo
sed -e "s/ foo//" ./test > ./test
该文件将只是变空。这不是这样吗?我怎样才能简单地编辑一个文件?谢谢。
我是bash脚本的新手,我试图编写一个bash脚本来编辑配置文件。我想从文件中删除“foo”。一行bash脚本编辑文件(不是创建一个新的)
使用代码
echo
sed -e "s/ foo//" ./test > ./test2
将创建一个我想要的内容的新文件。但如果我尝试使用此编辑相同的文件
echo
sed -e "s/ foo//" ./test > ./test
该文件将只是变空。这不是这样吗?我怎样才能简单地编辑一个文件?谢谢。
这是-i
开关是什么:编辑就地:
sed -i -e "s/ foo//" ./test
的-i
开关在man sed
记载:
-i [后缀],--in位置[=后缀]
编辑文件到位(使备份,如果扩展提供)
对于GNU sed
(linux),省略后缀时不会创建备份。对于sed
的其他版本,可能必须提供备份后缀。
空文件
壳牌打开文件test
写作 - >清除其所有以前的内容。
如何编辑同一文件
解决方案1: - 直列变化
sed -i.bk "s/ foo//" ./test
解决方案2: - 使用中间文件(以前CMD的手动版本)
sed -e "s/ foo//" ./test > test.bk && mv test.bk test
啊我明白了。 :D谢谢! – 2014-10-22 04:18:57
桑达是一个编辑器,不是文本编辑器。使用'-i'参数不是POSIX,再加上在替换原始文件之前创建临时文件的开销。
如果你想真正地编辑你的文件,你应该使用ed/ex来代替。
ex -sc '%s/ foo//g|xit' ./test
请参见手册页sed(1p),ed(1p)和ex(1p)。
It Works!谢谢 – 2014-10-22 04:18:23