我正在尝试搜索和替换文件中的一些文本。创建一个新文件或覆盖现有文件都可以。
如果我用
sed -i 's/<texttoreplace>/<newtext>/g' foo.txt
Run Code Online (Sandbox Code Playgroud)
我最终得到两个文件:
foo.txt是修改后的文件 foo.txte是原始的如果我用
sed -i 's/<texttoreplace>/<newtext>/g' foo.txt > bar.txt
Run Code Online (Sandbox Code Playgroud)
我最终得到2个文件:
foo.txt是原始的未修改文件。 bar.txt为0个字节。我究竟做错了什么?我真的更喜欢只覆盖原始文件,这似乎应该是可以的。
为了使第二个示例正常工作,您要在其中明确创建第二个文件,只需删除该-i标志即可。
sed 's/<texttoreplace>/<newtext>/g' foo.txt > bar.txt
Run Code Online (Sandbox Code Playgroud)
您的第一个示例有点让人头疼。该-i标志使用原始内容的可选备份文件进行就地编辑。它对我来说很好用,而无需创建'.txte'文件。您可以使用以下语法,通过明确告诉它没有扩展名来使其工作:
sed -i'' 's/<texttoreplace>/<newtext>/g' foo.txt
Run Code Online (Sandbox Code Playgroud)
您不必这样做,但也许您的环境中有些东西与我的有所不同。