Grep:如何匹配上下文?

时间:2016-10-19 11:33:30

标签: grep

这是问题所在,比方说我有这样的文件:

%% chunk A
#foo{
   %% blah
   more_blah = 1,
   field = f
  }

%% chunk B
#foo{
   %% blah
   more_blah = 1,
   more_blah = 1,
   more_blah = 1,
   more_blah = 1,
   field = f
  }


%% chunk C
#bar{
   field = f
  }

我想找到field = f,但只有在它之前的4行内有#foo,例如,块A匹配,块B和C都赢了,怎么能我这样做了?

2 个答案:

答案 0 :(得分:3)

您可以使用-A的{​​{1}}选项:

grep

grep -A 4 '#foo' file | grep "field = f" 会在匹配后为每个匹配打印-A 4行,因此此命令的第一部分采用4之后的行,剩下的就是查找{ {1}}在这些行中。

答案 1 :(得分:2)

使用sed

$ sed -n '/#foo/{N;N;N;N; /field = f/p}' ip.txt 
#foo{
   %% blah
   more_blah = 1,
   field = f
  }
  • -n默认情况下不打印行
  • /#foo/要匹配的字符串
  • N;N;N;N;在匹配的行
  • 后获得四行 如果模式/field = f/p匹配,则
  • /field = f/打印如此获得的5行
相关问题