假设我们有一个这样的文件:
l1 abcdefgh
l2 abcde
l3 some line i want to retrieve
l4 another line i want to retrieve
l5 matching pattern
l6 abc
l7 abcdef
l8 unmatching pattern
l9 blah blah
我想检索以下输出:
l3 some line i want to retrieve
l4 another line i want to retrieve
l5 matching pattern
l6 abc
l7 abcdef
所以我想在第一次出现匹配模式,匹配线和所有行之前输出两行,直到我点击'不匹配的模式'。当然,可以检索多个文本范围。
实现这一目标的最简单方法是什么?我应该使用哪些工具?谷歌的内容是什么?目前无法从基础知识中学习awk。
答案 0 :(得分:2)
{ a[i++ % 3 ]=$0}
/ matching pattern/ {print a[(i-3)%3];print a[(i-2)%3];i=0}
/matching pattern/,/unmatching pattern/ {if($0 !~ /unmatching pattern/) print }
答案 1 :(得分:2)
awk '/pattern/{print p"\n"q"\n"$0;f=1;next} {p=q;q=$0} f{s=s"\n"$0; if ($0~/unmatching/) { print s;exit} }' file
答案 2 :(得分:1)
在sed:
sed -n '1N;N;/pattern/{N;N;p;s/.*//;N;N;};$!D' filename