sed 搜索并替换创建新文件

sed search and replace creating new file

我正在尝试搜索和替换文件中的一些文本。我可以创建一个新文件,也可以覆盖现有文件。

如果我用

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

我做错了什么?我真的更喜欢就地覆盖原始文件,这当然看起来应该是可能的。

要使您的第二个示例正常工作,您明确要在其中创建第二个文件,只需删除 -i 标志。

sed 's/<texttoreplace>/<newtext>/g' foo.txt > bar.txt

你的第一个例子有点让人头疼。 -i 标志执行就地编辑,带有原始内容的可选备份文件。它对我来说很好用,无需创建“.txte”文件。您可以通过使用以下语法明确告诉它没有扩展名来让它工作:

sed -i'' 's/<texttoreplace>/<newtext>/g' foo.txt

你不应该这样做,但也许你的环境与我的不同。

只需复制并执行 sed

# 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

我在我的 mac 上使用 sed -ie,这与从原始文件创建备份文件并在文件扩展名末尾添加 e 做同样的事情。使用gsed -i并没有抱怨它并在没有创建备份文件的情况下更改了文件。

使用 brew 安装 gnu sed:

brew install gnu-sed