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

如何搜索并复制目标关键词所在的文本分隔块内容?

问题描述

我有一个结构如下的大型文本文件:

---

NAME: Some Name

Random
number
of lines with info.

---

NAME: Another Name

Random
number
of lines
with different info.

---

…

当搜索“different”这类关键词时,我希望将包含该关键词的对应块(从“NAME: Another Name”到下一个“---”)提取到新文件中,若存在多个匹配块,需全部收集到同一文件。目前使用grep different file.txt > edit.txt仅能提取含关键词的单行,不知如何提取整个分隔块,请问grep是否是合适的工具?

解决方案

grep不太适合处理这种块级内容提取的需求,它主打单行匹配,对付跨多行的块效率和灵活性都不够。更推荐用awk或者sed这类工具,它们天生擅长处理结构化的多行文本。

方法一:用awk快速提取

awk可以直接把---当作块分隔符,筛选出包含目标关键词的块:

awk -v RS='---' '/different/ {print "---" $0}' file.txt > edit.txt
  • -v RS='---':把---设为记录分隔符,每个---之间的内容会被当作一个独立的块。
  • /different/:只保留包含"different"的块。
  • print "---" $0:输出时重新加上---,保持原文件的块结构。

方法二:用sed精准定位块

sed通过区间匹配来锁定块,再检查关键词:

sed -n '/NAME:/,/---/{/different/{:a;N;/---/!ba;p}}' file.txt > edit.txt
  • /NAME:/,/---/:先定位从"NAME:"开头到下一个"---"结束的文本块。
  • /different/{:a;N;/---/!ba;p}:如果块里有"different",就把整个块的内容读进来并打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:54:58