macOS 13.3 Ventura下如何筛选前置含指定模式的目标行?
解决方案:BSD awk跨行状态匹配
核心命令
使用BSD awk跟踪状态,精准实现需求:
awk '/PXS[[:digit:]]@0/ { flag = 1 } /"model" =/ && flag { print }' 你的输入文件名.txt
工作原理
- 初始化时
flag变量默认值为0,表示尚未匹配到目标PXS[[:digit:]]@0行。 - 遍历每一行时,若当前行匹配
PXS[[:digit:]]@0,将flag设为1,标记后续行已满足前置条件。 - 若当前行包含
"model" =且flag为1,直接打印该行——确保只有在出现过目标PXS行之后的model行才会被输出。
错误原因分析
- 你之前的awk命令未正确维护状态标记,导致在PXS行出现前的model行(如示例A行)被错误输出。
- grep是单行处理工具,无法跨行记录前置条件是否满足,因此组合命令要么误判前置行,要么漏掉后续符合条件的行(如示例H行)。
测试示例
假设输入文本:
A: "model" = "pre-pxs" B: PXS3@0 C: "model" = "valid-1" D: random line E: "model" = "valid-2" F: PXS5@0 G: "model" = "valid-3" H: "model" = "valid-4"
执行上述命令后,输出结果为:
C: "model" = "valid-1" E: "model" = "valid-2" G: "model" = "valid-3" H: "model" = "valid-4"
内容的提问来源于stack exchange,提问作者Samuel Herschbein
相关产品推荐
相关产品推荐

