当前位置: 首页 > news >正文

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题:

我已经成功地使用以下 sed 命令在Linux中搜索/替换文本:

sed -i 's/old_string/new_string/g' /path/to/file

然而,当我在Mac OS X上尝试时,我得到:

command i expects \ followed by text

我以为我的Mac运行的是一个正常的BASH shell。这是怎么了?


回答:

  • 在 Linux 系统上使用命令 man sed 查看手册,

NAME
sed - stream editor for filtering and transforming text

简介是用于过滤和转换文本的流编辑器。再翻到对 -i 选项的描述部分,

-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)

就地编辑文件(如果提供了后缀,则进行备份),可见参数后缀 SUFFIX 是可选的,即带或者不带这个参数都可以执行。

  • 在 MacOS 系统上使用命令 man sed 查看手册,

NAME
sed – stream editor

简介是流编辑器。再翻到对 -i 选项的描述部分,

p1

以类似于 -I 的方式就地编辑文件,但将每个文件与其他文件独立处理。特别是,每个文件中的行号从1开始,“$” 地址与当前文件的最后一行匹配,并且地址范围仅限于当前文件。最终结果是,每个文件都由一个单独的 sed 实例编辑。可见 -i 后面是必选参数 extension,不写上扩展名参数就会报错,于是命令执行失败。

如果要同一个命令在两种系统上都成功执行,可写成:

sed -i'' -e 's/old_string/new_string/g' /path/to/file
#或者
sed -i'.bak' -e 's/old_string/new_string/g' /path/to/file

笔者测试过的系统有:

  • linux 5.4.0-131-generic #147-Ubuntu
  • Darwin Kernel Version 21.6.0

参考:

  • stackoverflow question 4247068
  • man sed

相关阅读:

  • 为什么我不能在脚本中使用“cd“来更改目录
  • 2>&1是什么意思
  • 如何使用bash脚本并行运行多个程序
  • 为什么要使用xargs命令
  • xargs命令用法实例
http://www.lryc.cn/news/345811.html

相关文章:

  • [Linux_IMX6ULL驱动开发]-GPIO子系统和Pinctrl子系统
  • Elasticsearch:理解人工智能相似性搜索
  • Mac YOLO V9推理测试(基于ultralytics)
  • OuterClass.this cannot be referenced from a static context
  • CAP与BASE分布式理论
  • JavaScript性能优化策略
  • curl访问流式非流式大模型openai api接口
  • Go 使用 MongoDB
  • 什么是g++-arm-linux-gnueabihf
  • Unity延时触发的几种常规方法
  • CSS文字描边,文字间隔,div自定义形状切割
  • XWiki 服务没有正确部署在tomcat中,如何尝试手动重新部署?
  • 【退役之重学Java】关于 Redis
  • DateKit
  • 百度智能云数据仓库 Palo 实战课程
  • 服务端JavaScript(Node.js)与去IO编程:Node.js的事件驱动和非阻塞IO模型,它是如何使JavaScript走向后端的
  • 一键局域网共享工具
  • python实现把doc文件批量转化为docx
  • WEB基础---反射
  • impdp恢复表后发现比原表多了100多行
  • Jupyter配置远程访问的密码
  • Windows下通过MySQL Installer安装MySQL服务
  • C语言 [力扣]详解环形链表和环形链表II
  • Threejs 学习笔记 | 灯光与阴影
  • SSH:安全远程访问的基石
  • 杰发科技AC7801——ADC之Bandgap和内部温度计算
  • 了解 macOS 中的系统完整性保护 (SIP):开启与关闭
  • 【Linux】简易进度条的实现
  • Docker + Django跨域解决方案
  • Maven 插件使用