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

如何用sed在匹配的3行文本块前插入指定内容?

解决Sed匹配3行块并前置插入内容的问题

核心思路

Sed默认逐行处理,要匹配连续多行的内容块,需用N命令将后续行载入模式空间,拼接成多行内容后再进行匹配判断。针对你的需求,我们需要把目标3行载入后完成匹配,再在匹配块的第一行之前插入指定内容。

具体命令

sed '/\[ placeholder \]/ {N;N; /Categ #.*\nItemName 2/ {i\new_line1\nnew_line2\nnew_line3\n} }' your_file.txt

命令拆解

  • /\[ placeholder \]/:定位到包含[ placeholder ]的行(方括号是Sed的特殊字符,必须加反斜杠转义)
  • {N;N;}:将当前行之后的2行依次载入模式空间,此时模式空间内存储了连续3行的内容
  • /Categ #.*\nItemName 2/:检查模式空间内的3行是否符合要求——包含Categ #开头的行(.*匹配任意编号n),且下一行是ItemName 2(\n代表换行分隔)
  • {i\new_line1\nnew_line2\nnew_line3\n}:匹配成功后执行i命令插入内容,每个\n用于分隔插入的行,最后一个\n确保插入内容与原块之间的换行格式正确

测试示例

假设原文件内容:

some random text
[ placeholder ]
Categ #7
ItemName 2
more content here

执行命令后的输出:

some random text
new_line1
new_line2
new_line3
[ placeholder ]
Categ #7
ItemName 2
more content here

注意事项

  • 若要直接修改原文件,给命令加上-i参数(适用于GNU Sed):
    sed -i '/\[ placeholder \]/ {N;N; /Categ #.*\nItemName 2/ {i\new_line1\nnew_line2\nnew_line3\n} }' your_file.txt
    
  • 不同版本Sed(如BSD Sed)的i命令语法可能有差异,若出现问题,可将插入内容拆分为多个i命令,比如:
    sed '/\[ placeholder \]/ {N;N; /Categ #.*\nItemName 2/ {i\new_line1
    i\new_line2
    i\new_line3
    } }' your_file.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:33:11