Regex 匹配上一次匹配之前的最后一次匹配

Regex 匹配上一次匹配之前的最后一次匹配,regex,bash,awk,grep,Regex,Bash,Awk,Grep,在匹配某个数字之前,如何匹配上次出现的foo foo: A 1 2 foo: B 1 foo: C 2 搜索模式2应返回: foo: A foo: C 使用awk: awk -v s='2' '/^foo:/{line=$0;next} $1==s{print line}' file foo: A foo: C 这个正则表达式当然可以使用一些优化,但它应该可以工作: foo: [A-Z](?=(?:(?!foo)[^2])*2) 演示:+1但你不应该使用字母l作为变量,因

在匹配某个数字之前,如何匹配上次出现的
foo

foo: A
  1
  2
foo: B
  1
foo: C
  2
搜索模式
2
应返回:

foo: A
foo: C
使用awk:

awk -v s='2' '/^foo:/{line=$0;next} $1==s{print line}' file
foo: A
foo: C

这个正则表达式当然可以使用一些优化,但它应该可以工作:

foo: [A-Z](?=(?:(?!foo)[^2])*2)

演示:

+1但你不应该使用字母
l
作为变量,因为它看起来太像数字
1
,在某些字体中完全无法区分。为了确保可读性,我不得不将其复制并粘贴到谷歌。建议使用得当,将
l
更改为
line