这是问题所在,比方说我有这样的文件:
%% 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都赢了,怎么能我这样做了?
答案 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行