一行bash脚本编辑文件(不创建新文件)

时间:2014-10-22 04:05:31

标签: linux bash sed edit

我是bash脚本的新手,我正在尝试编写一个bash脚本来编辑配置文件。我想从文件中删除“foo”。

使用代码

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

将使用我想要的内容创建一个新文件。但是,如果我尝试使用此

编辑同一个文件
echo
sed -e "s/ foo//" ./test > ./test

该文件将变为空。这不是方法吗?我怎么能简单地编辑一个文件?感谢。

3 个答案:

答案 0 :(得分:2)

这是-i切换的用途:编辑就地:

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

-i中记录了man sed开关:

  

-i [SUFFIX], - in-place [= SUFFIX]
         编辑文件(如果提供扩展,则进行备份)

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

答案 1 :(得分:1)

清空文件

Shell打开文件test进行写作 - >清除以前的所有内容。

如何编辑同一文件

解决方案1: - 内联更改

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

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

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

答案 2 :(得分:1)

Sed是一个[s] tream [ed] itor,而不是文本编辑器。使用' -i'参数不是POSIX,加上它会增加在替换原始文件之前创建临时文件的开销。

如果您想真正编辑文件,则应使用ed / ex。

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

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