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

如何用awk提取Board Info及其下属缩进文本块(无需硬编码结束行)

用Awk提取指定缩进格式的文本块

需求说明

需要从大文件中提取一段文本块:

  • 起始行是恰好2个空格开头的Board Info:行
  • 包含后续所有以4个空格开头的下属内容
  • 终止条件:遇到下一行是恰好2个空格开头的任意内容(无需硬编码终止行内容)

示例目标文本块:

Board Info: #512
    Manufacturer: "Dell Inc."
    Product: "0X3D66"
    Version: "A02"
    Serial: "..CN7016343F00IE."

(终止行为 Chassis Info: #768,无需提取该行)

现有尝试的问题

  1. 命令awk '/^\s{2}Board Info/,/^\s{2}[^B ]/' dump.txt:
    仅能处理终止行不以字母B开头的场景,若终止行是BOM:这类内容会失效。
  2. 命令awk '/^\s{2}Board Info/,/^\s{2}\S*/' dump.txt:
    终止模式会匹配起始行本身,导致仅提取Board Info:单行,无法获取下属缩进内容。

解决方案

通过**状态标记(flag)**实现精准匹配,逻辑如下:

  • 匹配到起始行时,开启标记并打印该行
  • 标记开启时,检查当前行:若为2个空格开头的非空白行(同级别行)则关闭标记;否则打印当前行(下属缩进内容)

精准匹配空格的命令(推荐)

awk '
/^  Board Info:/ { flag=1; print; next }
flag {
    if (/^  \S/) { flag=0 }
    else { print }
}
' dump.txt

兼容任意空白字符的命令(若文本可能混用制表符)

awk '
/^\s{2}Board Info:/ { flag=1; print; next }
flag {
    if (/^\s{2}\S/) { flag=0 }
    else { print }
}
' dump.txt

命令解释

  • 第一行:匹配到2个空格开头的Board Info:行,设置flag=1(开启提取状态),打印该行后跳过后续判断。
  • 第二块:当flag为1时,检查当前行是否是2个空白字符后接非空白字符(同级别起始行):
    • 若是:关闭flag,停止提取
    • 若否:打印当前行(即4空格开头的下属内容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:38:18