You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed编写两个脚本分别提取第2个* i开头行的前后内容

解决提取第二个* i开头行前后内容的sed脚本问题

我明白你之前的脚本只能处理第一个匹配行,现在给你两个精准的sed脚本,分别实现你的需求:

1. 提取第二个* i开头行之前的所有内容(不含该行)

这个脚本会遍历文件,计数匹配到的* i行,当遇到第二个匹配行时立即停止输出,确保只保留该行之前的所有内容:

sed -n '
/^\* i/{
    x
    s/^/1/
    /11/{q}
    x
}
p' your_input_file.txt

工作原理:

  • -n 让sed默认不输出任何行,只在我们指定时打印
  • 每遇到以* i开头的行,就交换模式空间(当前行内容)和保持空间(临时存储区)
  • 在保持空间里追加一个1,用来计数匹配次数
  • 当保持空间里出现11(说明是第二次匹配),就用q命令退出sed,停止处理后续内容
  • 其他行都通过p命令正常打印

2. 提取第二个* i开头行及之后的所有内容

这个脚本会跳过前两个匹配行之前的内容,从第二个匹配行开始,打印所有后续内容:

sed '
/^\* i/{
    x
    s/^/1/
    /11/{:loop; p; n; b loop}
    x
}
d' your_input_file.txt

工作原理:

  • 同样用保持空间里的1计数匹配次数
  • 当检测到第二次匹配(保持空间为11),就进入循环:打印当前行,读取下一行,继续打印,直到文件结束
  • 所有未触发第二次匹配的行,都用d命令删除,不输出

测试示例

假设你的输入文件内容如下:

普通行1
* i 匹配行1
普通行2
* i 匹配行2
普通行3
普通行4
  • 第一个脚本输出:
    普通行1
    * i 匹配行1
    普通行2
    
  • 第二个脚本输出:
    * i 匹配行2
    普通行3
    普通行4
    

内容的提问来源于stack exchange,提问作者stacko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:46:51