sed搜索并替换创建新文件

时间:2017-04-04 18:17:53

标签: sed cygwin

我正在尝试搜索并替换文件中的某些文本。我可以创建新文件或覆盖现有文件。

如果我使用

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字节。

我做错了什么?我真的更愿意只是覆盖原始文件,这看起来应该是可能的。

2 个答案:

答案 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