Linux之sed命令(包含MacOS的用法)

 更新时间:2025年09月04日 09:27:47   作者:minh_coo  
文章介绍了Linux下的sed流编辑器功能及在MacOS中的兼容性问题,指出直接使用会导致报错,推荐安装GNU sed解决,同时概述了sed的基本用法,包括追加、修改、删除等文本处理操作,适用于多种场景

一、概述

Linux下的sed命令是一种流编辑器,用于在命令行中对文本进行处理,常见的操作如:添加、修改、删除、追加等。

当所用系统为MacOS时,直接使用sed会出现

command a expects \ followed by text

此类报错,处理方法如下:

解决方案1:sed命令改写 --> 添加一个空串

sed -i ‘s/apple/applewatch/g' /tmp/a.txt
  • 改写为
sed -i ‘' ‘s/apple/applewatch/g' /tmp/a.txt

解决方案2:调整mac下的sed命令 --> 安装gnu-sed

  • 执行:
brew install gnu-sed
alias sed=gsed

本人建议使用第二种方式解决,一劳永逸。

extra:在使用sed新增一行时会使用到\,macOS会把反斜杠解析为命令结束字符,后面不允许携带新字符,导致报错

extra characters after \ at the end of a command

只能通过把命令分割成两行内容。

示例:

原命令:sed -i '$a new line' /tmp/a.txt
macOS下需要写成:
sed -i '' -e '$a\
new line' /tmp/a.txt

二、用法

以下介绍sed命令常用方法。

1、文件末尾追加一行

sed -i '$a <new_line>' <file_name>
示例:sed -i '$a this is a new line' /tmp/sed.txt

2、指定行后新增一行

sed -i '/<specific_line>/a\<new_line>' <file_name>
示例:sed -i '/an existing line/a\this is a new next line' /tmp/sed.txt

其中<specific_line>可以为模糊匹配,例如为line但有多行都包含line,此时会在所有包含line关键字的行后都新增一行。

此规则以下都适用。

3、指定行前新增一行

sed -i '/<specific_line>/i\<new_line>' <file_name>
示例:sed -i '/an existing line/i\this is a new upper line' /tmp/sed.txt

4、修改指定行

sed -i 's/<old_content>/<new_content>/g' <file_name>
示例:sed -i 's/magic_switch=0/magic_switch=1/g' /tmp/sed.txt

5、删除指定行

sed -i '/<specific_line>/d' <file_name>
示例:sed -i '/trash_line/d' /tmp/sed.txt

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • centos7 设置grub密码及单用户登录实例代码

    centos7 设置grub密码及单用户登录实例代码

    这篇文章主要介绍了centos7 设置grub密码及单用户登录实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Linux使用tcpdump捕获网络数据包的详细步骤

    Linux使用tcpdump捕获网络数据包的详细步骤

    在网络故障排查、协议分析或网络安全检测中,抓包工具是不可或缺的"利器",而tcpdump作为Linux系统中历史最悠久、功能最强大的命令行抓包工具,至今仍是工程师的首选,本文将从基础操作到实战技巧,带你掌握用tcpdump捕获网络数据包的完整流程,需要的朋友可以参考下
    2025-08-08
  • Linux NFS服务器安装与配置思路分析

    Linux NFS服务器安装与配置思路分析

    NFS 是Network File System的缩写,即网络文件系统,可以让不同的客户端挂载使用同一个目录,作为共享存储使用,这样可以保证不同的节点客户端数据一致性,在集群架构中经常用到.这篇文章主要介绍了Linux NFS服务器安装与配置思路,需要的朋友可以参考下
    2016-10-10
  • Linux Centos7系统端口占用问题的解决方法

    Linux Centos7系统端口占用问题的解决方法

    这篇文章主要给大家介绍了关于Linux Centos7系统端口占用问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • 在Centos7中配置NIS的详细过程

    在Centos7中配置NIS的详细过程

    大家好,本篇文章主要讲的是在Centos7中配置NIS的详细过程,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • VMware虚拟机中Ubuntu18.04无法连接网络的解决办法

    VMware虚拟机中Ubuntu18.04无法连接网络的解决办法

    这篇文章主要为大家详细介绍了VMware虚拟机中Ubuntu18.04无法连接网络的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Linux kde中11个你不知道的应用程序

    Linux kde中11个你不知道的应用程序

    今天小编就为大家分享一篇关于Linux kde中11个你不知道的应用程序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • vmware安装CentOS 7的详细教程

    vmware安装CentOS 7的详细教程

    这篇文章主要为大家详细介绍了vmware安装CentOS7的详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 详解如何在Linux中重置MySQL或者MariaDB的root密码

    详解如何在Linux中重置MySQL或者MariaDB的root密码

    本篇文章主要介绍了如何在 Linux 中重置 MySQL 或者 MariaDB 的 root 密码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • CentOS 7中Nginx日志定时拆分实现过程详解

    CentOS 7中Nginx日志定时拆分实现过程详解

    这篇文章主要介绍了CentOS 7中Nginx日志定时拆分实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论