我是bash脚本的新手,我正在尝试编写一个bash脚本来编辑配置文件。我想从文件中删除“foo”。
使用代码
echo
sed -e "s/ foo//" ./test > ./test2
将使用我想要的内容创建一个新文件。但是,如果我尝试使用此
编辑同一个文件echo
sed -e "s/ foo//" ./test > ./test
该文件将变为空。这不是方法吗?我怎么能简单地编辑一个文件?感谢。
答案 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)。