我正在尝试搜索并替换文件中的某些文本。我可以创建新文件或覆盖现有文件。
如果我使用
sed -i 's/<texttoreplace>/<newtext>/g' foo.txt
我最终得到了两个文件:
foo.txt 是修改后的文件foo.txte 是原始的
如果我使用
sed -i 's/<texttoreplace>/<newtext>/g' foo.txt > bar.txt
我最终得到了2个文件:
foo.txt 是原始未经修改的文件。bar.txt 为0字节。
我做错了什么?我真的更愿意只是覆盖原始文件,这看起来应该是可能的。
答案 0 :(得分:4)
要使您的第二个示例正常工作,您明确要创建第二个文件,只需删除-i
标记。
sed 's/<texttoreplace>/<newtext>/g' foo.txt > bar.txt
你的第一个例子有点令人头疼。 -i
标志使用原始内容的可选备份文件执行编辑。它对我来说很好,没有创建'.txte'文件。您可以通过使用以下语法明确告诉它没有扩展来使其工作:
sed -i'' 's/<texttoreplace>/<newtext>/g' foo.txt
你不应该这样做,但也许你的环境中有些东西与我的不同。
答案 1 :(得分:1)
只需复制并执行
# docker can not replace mount file
cp /etc/nginx/conf.d/nginx.template /etc/nginx/conf.d/nginx.conf
sed -i "s/findText/${replaceText}/g" /etc/nginx/conf.d/dboard_nginx.conf