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

如何获取grep匹配var行之前首次出现的before字符串

需求与解决方案

问题描述

我有如下格式的文本内容:

before = text1234
foo = 1234
bar = 1234
var = words
    
before = text2345
foo = 2345
bar = 2345
etc = 2345
var = words

目前使用grep -n var *命令查找包含var的行,但需要获取每个匹配var的行之前首次出现的before行。尝试过grep -B 10选项,但由于每组内容的行数不固定,该方法无法满足需求。期望的输出结果为:

before = text1234
before = text2345

希望通过sed或awk实现该需求。

解决方案

方法一:使用awk

核心思路是记录最新遇到的before行,当匹配到var行时输出该记录:

awk '/^before =/{b=$0} /^var =/{print b}' your_file.txt
  • /^before =/{b=$0}:匹配以before =开头的行,将整行内容存入变量b
  • /^var =/{print b}:匹配到var行时,打印之前保存的before行内容

方法二:使用sed

利用sed的保持空间暂存before行,遇到var行时取出并输出:

sed -n '/^var =/{x;p;d} /^before =/{h}' your_file.txt
  • /^before =/{h}:将匹配到的before行存入保持空间
  • /^var =/{x;p;d}:匹配到var行时,交换保持空间与模式空间内容,打印后退出当前循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:05:29