是否有一种调用sed todo的就地编辑功能,而无需在Linux和Mac上运行备份?虽然OSX附带的BSDsed似乎需要sed -i '' …,但GNUsedLinux发行版通常会将引号解释为空输入文件名(而不是备份扩展名),并且需要sed -i ….

是否有任何命令行语法可以同时使用这两种风格,这样我就可以在两个系统上使用相同的脚本?

推荐答案

如果你真的想以"简单"的方式使用sed -i,那么以下内容在GNU和BSD/Mac sed上都适用:

sed -i.bak 's/foo/bar/' filename

请注意缺少空间和圆点.

证据:

# GNU sed
% sed --version | head -1
GNU sed version 4.2.1
% echo 'foo' > file
% sed -i.bak 's/foo/bar/' ./file
% ls
file  file.bak
% cat ./file
bar

# BSD sed
% sed --version 2>&1 | head -1
sed: illegal option -- -
% echo 'foo' > file
% sed -i.bak 's/foo/bar/' ./file
% ls
file  file.bak
% cat ./file
bar

显然,你可以删除.bak个文件.

Linux相关问答推荐

没有发现运行时依赖关系,但它在S的运行时路径中有吗?

Linux-如何区分目录中名称相同但扩展名不同的所有文件

pci_user_write_config_word在哪里实现?

计算与文件第一列对应的第二列中的字符串出现次数

重命名具有相同前缀的文件对中最旧的文件

使用文件名重新打开 linux 管道(仅从一侧)

从 bash shell 等效项在fish shell 上设置 $ANDROID_SDK_ROOT

文件未在脚本中使用 cp 命令复制到 Docker 容器中

使用 awk 将索引列添加到 csv

在三星 chromebook 上编程

判断条件是否为假

使用 rc.local 运行脚本:脚本有效,但在启动时无效

KDE 桌面效果中的 OpenGL 和 XRender 有什么区别?

未定义的引用 'shm_open',已在此处添加 -lrt 标志

SVN 错误:无法将字符串从本机编码转换为UTF-8

bash 脚本中的自动 docker 登录

如何将文件夹中的文件列表发送到Linux中的txt文件

PostgreSQL psql 终端命令

使用 SED 将单词的首字母大写

如何始终以 GB 为单位获取 df linux 命令输出