如何使用 sed 仅替换第二个匹配行

2023-12-12

$ cat file
cat cat
dog cat
dog puppy
dog cat

使用 sed:

$ sed 's/dog/big_dog/' my_file > new_file
$ cat new_file
cat cat 
big_dog cat
big_dog puppy
big_dog cat

我的目标是只替换第二个dog with big_dog但这并没有发生:

$ sed 's/dog/big_dog/2' my_file > new_file
cat
dog cat
dog puppy
dog cat

我怎样才能只替换第二次出现的情况,即:

cat
dog cat
big_dog puppy
dog cat

sed第二次出现的替换是:

sed "/dog/ {n; :a; /dog/! {N; ba;}; s/dog/big_dog/; :b; n; $! bb}" your_file

解释:

/dog/ {           # find the first occurrence that match the pattern (dog)
  n               # print pattern space and read the next line
  :a              # 'a' label to jump to
  /dog/! {        # if pattern space not contains the searched pattern (second occurrence)
    N             # read next line and add it to pattern space
    ba            # jump back to 'a' label, to repeat this conditional check
  }               # after find the second occurrence...
  s/dog/big_dog/  # do the substitution
  :b              # 'b' label to jump to
  n               # print pattern space and read the next line
  $! bb           # while not the last line of the file, repeat from 'b' label
}

请注意,在找到第二次出现后,需要最后 3 个命令来打印文件的其余部分,否则可能会对搜索模式的每个偶数出现重复替换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 sed 仅替换第二个匹配行 的相关文章

  • 在Linux上如何找到当前目录的所有直接子目录?

    在Linux上如何找到当前目录的所有直接子目录 最简单的方法是通过编写来利用 shell 通配功能echo 如果你喜欢使用ls 例如要应用格式 排序选项 请使其ls d 解释 斜杠确保仅考虑目录 而不考虑文件 Option d 列出目录本身
  • PhoneGap - 构建 PhoneGap Android 应用程序在 Linux 上出现编译错误

    我在我的 linux ubuntu 12 04 机器上构建phonegap android 应用程序时遇到错误 我已经安装了nodejs 将JAVA HOME ANT HOME ANDROID HOME vars和 JAVA HOME bi
  • 如何解决错误:psycopg2 构建轮失败?

    我遇到问题了psycopg2 的构建轮子 thru pip install r requirements txt 我使用的是 ubuntu 20 04 python 3 8 5 venv 这是我的要求 txt amqp 2 6 1 anyj
  • Linux 汇编调试器

    我需要一个在 Linux 上进行汇编的调试器 我对 Linux 上缺乏调试器感到非常惊讶 它应该具有各种功能 例如显示寄存器等等 我会使用 GDB 但它对 NASM 不太友好 我宁愿让调试器具有英特尔语法 但我可以做出牺牲 我尝试过 kdb
  • 复制稀疏文件

    我正在尝试了解 Linux UNIX 低级接口 作为练习 我想编写一个代码 将一个有漏洞的文件复制到一个新文件 同样有漏洞 所以我的问题是 如何从第一个文件读取 而不是直到第一个洞 而是直到文件的最后 如果我没错的话 read 当到达第一个
  • 使用 C++ 更改终端字体大小

    我正在用 C 做一个小项目 在 Ubuntu 11 04 中 该程序是基于文本的 全部在 Gnome 终端中 我正在使用 ncurses 库来更改字体颜色 但我也想将不同大小的文本打印到终端 并且不知道如何使用 ncurses 来做到这一点
  • 如何测量 Linux 中给定进程的活动导致的净使用磁盘空间变化?

    我想监视正在运行的进程的磁盘空间需求 理想情况下 我希望能够指向一个进程并找出由该进程引起的已用磁盘空间的净变化 在 Linux 中是否有一种简单的方法可以做到这一点 我很确定在 Solaris 中使用 DTrace 执行此操作是可行的 尽
  • 需要一种临时重定向 STDOUT 的方法

    我知道如何在 Linux 中重定向输出 问题是 我的 bash 脚本中有很多输出 我不想输入类似的内容 echo foo gt gt bar 一遍又一遍地 我更愿意做这样的事情 hey bash for the time being put
  • exec 是否保留文件描述符

    这实际上是一个两步问题 文件描述符到底是什么 我认为这是表示打开文件的最基本方式 但既然dup2可以让两个不同的文件描述符指向同一个文件 那么代表唯一文件的又是什么呢 如果我在 exec 之前执行 dup2 整个程序就会被清除 它是否仍然具
  • 如何在 Linux 上的 php 中启用 --enable-soap?

    这就是问题所在 我在 Apache 上安装了 PHP 5 2 9 但无法升级 PHP 有没有办法在 PHP 5 2 9 中启用 SOAP PHP 手册中说 要启用 SOAP 支持 请使用 enable soap 配置 PHP 这根本没有帮助
  • 使用可加载内核模块修改帧缓冲区(/dev/graphics/fb0)参数

    Problem 我必须配置 Android 平台使用的各种 LCD 显示器 几乎在所有情况下 都没有针对感兴趣的 LCD 显示器免费提供的电气规格 但通过经验和逆向工程 可以很好地猜测参数 我正在尝试使用可加载内核模块来微调显示参数 也欢迎
  • 在管道中使用“tee”时,如何将标准错误写入文件?

    我知道如何使用tee写入输出 标准输出 https en wikipedia org wiki Standard streams Standard output 28stdout 29 of aaa sh to bbb out 同时仍然在终
  • 捕获活动窗口中的变化(适用于 Linux)

    有没有办法知道 linux x windows 用户何时通过 alt tab 或单击更改活动窗口 我想编写一个监听此事件的脚本 如果发生此类事件 该脚本将继续查找当前活动窗口 我知道如何解决 我还可以继续轮询以查找当前活动窗口 但这是一种不
  • 什么可能导致 sock send() 命令上的“资源暂时不可用”

    什么会导致Resource temporarily unavailable套接字上的错误send 命令 套接字设置为AF UNIX SOCK STREAM 它在大多数情况下都有效 但偶尔会出现此错误 套接字的接收端似乎工作正常 我知道这不是
  • 找到 32 位 ELF Linux 二进制文件结束和填充开始的位置?

    如何确定 32 位 ELF Linux 二进制文件的结束位置以及附加到文件的其他数据的开始位置 例如 某些软件会将数据附加到文件末尾以供提取或执行 同时包含在单个二进制文件中 自解压存档就是此类文件的一个示例 我想做的事情类似于通过PE头找
  • 我想要 Linux 上的 C 函数来收集核心转储而不终止进程

    abort 确实收集核心转储 但我不希望进程终止 dump core 收集核心转储 但在内核空间中 用户空间中是否有与 dump core 等效的函数 自己做的一个简单方法是fork进程 创建父进程的完整副本 并调用abort来自子进程 子
  • 哪些非 Linux Unix 支持 openat()?

    openat http linux die net man 2 openat在 POSIX 1 2008 修订版中添加到 POSIX 并从 2 6 16 开始受到 Linux 支持 对非 Linux UNIX 的支持如何 例如 Darwin
  • 如何显示带有完整路径或文件名的“grep”结果[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 使用时如何获取完整的文件路径grep 我使用类似的命令 cat log grep somethingtosearch 我需要显示结果以及从
  • bash 脚本中自动 docker 登录

    我如何提交我的凭据docker login脚本中的命令 我使用的 bash 脚本基本上自动化了设置自定义虚拟机等的整个过程 但是当我需要在脚本中登录 docker 来提取映像时 我收到以下错误 用户名 FATA 0000 设备的 ioctl
  • 如何在 python setup.py 中 chmod 文件?

    我使用 setup py 创建了一个 python 包安装 我希望它复制文件夹 为临时创建的 did 中的数据文件 问题是我必须使用 sudo 权限调用 setup py 因为它写入 usr local 因此 当我的数据文件复制到 did

随机推荐

  • Web API:无法序列化内容类型的响应正文

    我正在使用 ASP NET MVC 5 Web Api 我现有的应用程序包含许多 api 最近我实现了自定义 JsonConverter 它将根据时区转换日期 public class CustomInfoConverter JsonCon
  • TypeError - python 中的客户端错误

    我用 python 创建了一个客户端 服务器代码 服务器运行良好并侦听 8000 端口 但是当我通过客户端连接到它然后尝试向服务器发送消息时 出现以下错误 Traceback most recent call last File C Use
  • 如何检索 ADO.NET SqlCommand 的结果?

    我正在使用 ASP NET 我想查找表中的行数 我知道这是 SQL 代码 select count from topics 但是如何让它显示为数字呢 我想做的就是运行该代码 如果它 0 显示一件事 但如果它大于 0 显示其他内容 这是我到目
  • 如何将QLineEdit背景变成进度条

    该代码创建一个对话框QLineEdit and a QPushButton 单击按钮时我想要QLineEdit变成一个进度条 显示按下按钮触发的过程的进度 当该过程完成时QLineEdit应该恢复到正常的 LineEdit 外观 如何实现这
  • 检查字符串是否以以下结尾

    我想检查字符串是否以以下结尾 v number 例如 hello world false hello world v2 true hello world v false hello world v88 true 不完全确定如何执行此正则表达
  • “与 Google 集成”按钮消失

    这是我们的 Google Apps Marketplace 应用程序的列表 该按钮也从我们集成的每个页面上消失了 当我在应该出现该按钮的页面上查看浏览器中的控制台日志时 我看到对此网址的调用 https apis google com ad
  • 根据序列号重命名匹配的文件

    假设我有一堆 mac 屏幕截图的文件 Screen Shot 2018 11 09 at 12 37 37 PM png Screen Shot 2018 11 10 at 4 53 02 PM png Screen Shot 2018 1
  • Chartjs - 如何在 x 轴标签上获取过去 7 天的数据?

    我试图在折线图的 x 轴上获取过去 7 天的信息 使用 Chartjs 做这个的最好方式是什么 Thanks 您可以使用以下代码实例化过去 7 天的图表 let start new Date end new Date start setDa
  • 优化行为测试套件

    我有一个测试套件 其中有 20 个功能文件 并且正在执行 100 MySQL CRUD 操作 大约需要 5 分钟才能完成 如果我手动进行测试 最多需要大约 7 分钟 我需要知道的是 我需要做什么才能优化整个流程 Note 平行跑者不支持对于
  • 无法在 Ionic 2 项目中使用 cordova 文件插件读取文件

    我正在尝试使用Cordova 文件插件读取移动设备中保存的图像 这样我就可以获得它的 Base64 编码 我需要远程存储它 问题在于 resolveLocalFilesystemUrl 方法本应提供一个 File Entry 对象 但似乎返
  • 何时使用 git 子树?

    有什么问题git subtree解决 我何时以及为什么应该使用该功能 我读到它是用于存储库分离 但为什么我不直接创建两个独立的存储库 而是将两个不相关的存储库合并为一个呢 这个 GitHub 教程解释了如何执行 Git 子树合并 我有点知道
  • PHP 致命错误:找不到类“Dotenv”

    我有一个项目 我尝试运行它 但出现以下错误 PHP Fatal error Class Dotenv not found in home maras Documents eCodile debtorcare server bootstrap
  • 使用包“cmprsk”在 R 中自定义竞争风险图

    我正在尝试使用 R 和包定制竞争风险图cmprsk 具体来说 我想覆盖默认情况 即对于竞争事件使用颜色 对于不同组使用线型 这是我的可重现的示例 library ggplot2 library cmprsk library survmine
  • 标准化 FFT 数据 (FFTW)

    我一直在使用 FFTW 计算标准化 wav 文件数据的 FFT 然而 我对如何标准化 FFT 输出有点困惑 我一直在使用对我来说显而易见的方法 即除以最高的 FFT 幅度 然而 我已经看到建议除以 1 N 和 N 2 其中我假设 N FFT
  • 仅在 NVIDIA 上的 glDrawArrays 上的 Java OpenGL EXCEPTION_ACCESS_VIOLATION

    我正在使用 lwjgl 开发一个 java 游戏 它是 OpenGL 实现 从来没有任何问题 直到我与一位使用 NVIDIA 而不是 AMD 的同事交换它 突然它在 AMD 上工作的线路上崩溃 但它只在代码中的那个点崩溃 这是最磨损的部分
  • 在 Grails 中解析 CSV 并导出到 Mysql 数据库

    我是 Groovy Grails 的新手 我想提交解析 CSV 文件并导出到 MySQL 数据库的多个表中 我看过一些编码 但作为新手 这让我感到困惑 那么任何人都可以帮助我理解简单的 csv 文件解析并导出到 MySQL 数据库 谢谢 索
  • 适用于 Android 的 pdf 查看器库

    我知道这个问题已经被问过好几次了 但我找不到一个令人满意的答案 我的要求很简单 只需在我的应用程序 android 中打开pdf文档 但我无法找到一种简单的方法来做到这一点 它的原生 c c 方式或编写自己的引擎 但是没有任何简单的 API
  • 如何在dygraphs中设置特定的y轴标签点?

    Dygraphs 通常会根据轴的大小 标签的大小等自动选取 Y 和 X 轴标记点 在某些情况下 它会选取导致清晰度较低的标记点 例如 在 Y 轴值为 0 到 10 的图表上 它标记为 0 4 和 8 至少对于特定尺寸的图表而言 我希望将其标
  • wpf/silverlight 应用程序到 DVD

    如何转换 wpf silverlight 应用程序 使其可以在 DVD 上运行 我们有用于学习目的的 wpf 应用程序 我们希望创建该应用程序的 DVD 版本并将其提供给我们的用户 以便他们可以回家使用它们 任何建议将不胜感激 我们已经查看
  • 如何使用 sed 仅替换第二个匹配行

    cat file cat cat dog cat dog puppy dog cat 使用 sed sed s dog big dog my file gt new file cat new file cat cat big dog cat