我需要在grep输出之前查看5行 我用了命令,
grep -B 5 pattern filename
但是因为错误/usr/bin/grep: illegal option --B
如何处理这种情况并在grep语句之前查看5行?
答案 0 :(得分:0)
您是否考虑过使用awk
?
如果这是一个可行的选项,请检查这个,长,行:
$ awk '/PATTERN/{for(i=1;i<=x;)print a[i++];print}{for(i=1;i<x;i++)a[i]=a[i+1];a[x]=$0;}' x=5 file
上面的命令将返回匹配模式和匹配模式之前的五行(即总共6行,而grep -B 5
返回总共五行,包括匹配的一行)。
x
表示行数
我希望这会有所帮助。
答案 1 :(得分:0)
Simply_Me的答案是正确的,但复制了每个不匹配的所有前一行。 (挑选技术性:即使gawk的实现避免了复制字符串本身,它仍然需要重新散列索引)。所以,仍然坚持使用awk:
#!/usr/bin/awk -f
BEGIN { cl=1; }
/foo5/ {
for (i=cl; i<cl+N; i++)
print pLines[i % N];
cl=1;
}
{ pLines[cl % N] = $0; cl = cl + 1; }
cl代表当前行。如果我们有匹配,我们打印N行,我们之前存储在pLines数组中。您可能希望打印模式本身,我没有。无论看到哪种模式,我们都会使用%运算符存储我们刚刚在pLines中处理的行,因此我们不必移动数组。
有关
zoo0
blah1
foo2
bar3
hehe4
lisp5
foo5
blah6
foo7
bar8
hehe9
foo5
打印
blah1
foo2
bar3
hehe4
lisp5
foo5
blah6
foo7
bar8
hehe9
这是前5行不包括模式。
它也适用于
hehe4
lisp5
foo5
blah6
foo7
bar8
hehe9
foo5
在foo5的第一场比赛之前没有5前一行。在这种情况下,它打印空行。您可能需要根据需要定制。