Grep 格雷普:如何匹配上下文?
这里是问题所在,假设我有一个如下所示的文件:Grep 格雷普:如何匹配上下文?,grep,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 } 我想找到字段=f,
%% 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
}
我想找到
字段=f
,但前提是它前面的4行中有#foo
,例如,块A匹配,块B和块C都不匹配,我该怎么做?您可以使用grep
的-A
选项:
grep -A 4 '#foo' file | grep "field = f"
-A 4
将在每次匹配后打印4
行,因此此命令的第一部分将获取A#foo
后的行,剩下的就是在这些行中查找字段=f
。您可以使用grep
的-A
选项:
grep -A 4 '#foo' file | grep "field = f"
-A 4
将在每次匹配后打印4
行,因此此命令的第一部分将获取A#foo
后的行,剩下的就是在这些行中查找字段=f
。Withsed
$ sed -n '/#foo/{N;N;N;N; /field = f/p}' ip.txt
#foo{
%% blah
more_blah = 1,
field = f
}
默认情况下不打印行-n
- 要匹配的字符串
N;NNN代码>在匹配行之后获取四行
如果模式匹配,则打印这样获得的5行/field=f/p
sed
$ sed -n '/#foo/{N;N;N;N; /field = f/p}' ip.txt
#foo{
%% blah
more_blah = 1,
field = f
}
默认情况下不打印行-n
- 要匹配的字符串
N;NNN代码>在匹配行之后获取四行
如果模式匹配,则打印这样获得的5行/field=f/p