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

Bash中匹配多段缩进内容并输出所有匹配结果的方案

解决Bash中多行正则匹配块的问题

方案1:用awk(推荐,易读且支持多文件)

awk处理这类多行块逻辑很直观,直接按规则输出匹配的段落:

awk '
/^keyword/ { print; in_block=1; next }
in_block && /^[ \t]/ { print; next }
{ in_block=0 }
' *.md

逻辑说明:

  • 碰到以keyword开头的行,打印该行并标记进入匹配块
  • 处于匹配块内时,只要是空格/制表符开头的缩进行就打印
  • 碰到既不是keyword开头也不是缩进的行,退出匹配块,不输出

直接替换*.md为你要处理的文件列表(比如file1.md file2.md)即可,多文件的匹配结果会按文件顺序输出。

方案2:用GNU sed

如果习惯用sed,GNU sed(Linux默认版本)可以通过标签循环实现:

sed -n '/^keyword/{:a;p;n;/^[ \t]/ba}' *.md

逻辑说明:

  • -n 表示只打印匹配内容
  • 找到keyword开头的行后,进入循环:打印当前行,读取下一行,若下一行是缩进开头就继续循环,直到遇到非缩进行停止

方案3:用GNU grep(需注意换行处理)

要是一定要用grep,得借助GNU grep的特殊选项处理多行:

grep -zPo '(^keyword.*?(?=\n[^ \t]|\Z))' *.md | tr '\0' '\n'

逻辑说明:

  • -z 把整个文件当作单行处理(用null字符分隔内容)
  • -P 启用Perl正则语法,支持正向预查
  • 正则匹配keyword开头的内容,直到碰到换行后非缩进的行或文件结尾
  • 最后用tr把grep输出的null字符换回正常换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:01:13