BSD sed 与 GNU sed 和 -i

BSD sed 与 GNU sed 和 -i

Unix iMac shell 终端

sed -i 's/original/new/g' maths.tx  

返回消息:sed:-i 不能与 stdin 一起使用

答案1

Mac 使用 BSD 版本的实用程序,例如seddate,它们有自己的特性。

在这种特定情况下,BSD 版本为sed 授权备份文件的扩展名是-i,而不是选修的,如 GNU 中那样sed

像这样:

sed -i .bak 's/needle/pin/g' haystack

显示的命令将替换文件中的所有实例needlepin并且haystack原始文件将保留在 中haystack.bak

sed来自Mac上的实现手册:

-i extension
         Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.
         It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in
         situations where disk space is exhausted, etc.

与 Linux 主机上相反:

  -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

请注意,“零长度扩展”与“无扩展”不同。然后,您可以完全避免备份:

sed -i '' 's/needle/pin/g' haystack

答案2

您必须指定一个备份文件,例如:

sed -i .bak 's/original/new/g' maths.tx  

相关内容