Using grep http://www.computerhope.com/unix/ugrep.htm,您可以打印与您的搜索查询匹配的行。添加一个-C
选项将打印两行周围的上下文,如下所示:
> grep -C 2 'lorem'
some context
some other context
**lorem ipsum**
another line
yet another line
同样,您可以使用grep -B 2
or grep -A 2
分别打印前面两行或后面两行的匹配行,例如:
> grep -A 2 'lorem'
**lorem ipsum**
another line
yet another line
是否可以跳过匹配行并仅打印上下文?具体来说,我只想打印匹配项上方 2 行的行,如下所示:
> <some magic command>
some context
如果你可以允许几个grep
要使用的实例,您可以像我在评论部分中提到的那样尝试。
$ grep -v "lorem" < <(grep -A2 "lorem" file)
another line
yet another line
$ grep -A2 "lorem" file | grep -v "lorem"
another line
yet another line
如果您对一剂感兴趣awk
,有一个很酷的方法可以做到这一点
$ awk -v count=2 '{a[++i]=$0;}/lorem/{for(j=NR-count;j<NR;j++)print a[j];}' file
another line
yet another line
它的工作原理是将整个文件存储在自己的数组中,然后搜索模式lorem
,存储行号的 awk 特殊变量(NR
),指向找到该模式的确切行。如果我们按照下面的指示在它之前循环 2 行awk
多变的-v count
,我们可以打印所需的行。
如果您也对打印图案感兴趣,只需将 for 循环中的条件更改为j<=NR
代替j<NR
。就是这样!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)