BSD sed 与 GNU sed 和 -i

Kam*_*Kam 8 bsd sed gnu

Unix iMac 外壳终端

sed -i 's/original/new/g' maths.tx  
Run Code Online (Sandbox Code Playgroud)

返回消息:sed:-i 不能与标准输入一起使用

Dop*_*oti 13

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

在这种特定情况下,BSD 版本sed 强制要求备份文件的扩展名是-i,而不是可选的,就像在 GNU 中一样sed

像这样:

sed -i .bak 's/needle/pin/g' haystack
Run Code Online (Sandbox Code Playgroud)

所显示的命令将替换的所有实例needlepin文件中haystack,原来的文件将在被保留haystack.bak

从在sedMac 上实现的手册:

-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.
Run Code Online (Sandbox Code Playgroud)

与在 Linux 主机上相反:

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

          edit files in place (makes backup if SUFFIX supplied)
Run Code Online (Sandbox Code Playgroud)

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

sed -i '' 's/needle/pin/g' haystack
Run Code Online (Sandbox Code Playgroud)

  • @Kam 好!如果这解决了您的问题,请考虑[接受答案](https://unix.stackexchange.com/help/someone-answers)。 (3认同)

Ipo*_*cer 3

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

sed -i .bak 's/original/new/g' maths.tx  
Run Code Online (Sandbox Code Playgroud)