如何获取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
相关产品推荐
相关产品推荐

