在如下的文本文件中,
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
#Line5
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
我想提取匹配的行和接下来的2行。输出应该是:
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
如何实现这一目标?
谢谢, 亚历
答案 0 :(得分:2)
根据要求awk
awk '/PATTERN/{c=3}c&&c--' file
或
awk '/PATTERN/{c=3}c-->0' file
但grep
:
grep -A2 file
答案 1 :(得分:1)
使用此awk:
awk '/PATTERN/{s=1} s++ < 4' file
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
答案 2 :(得分:1)
使用grep有一种直接的方法。您将在上下文之间获得--
行,并可以使用反向匹配-v
删除它们。请参阅grep man page
中的文档。
grep -A2 "PATTERN" file | grep -v -- "^--$"
使用awk:
awk '/PATTERN/{c=NR+2}(NR<=c){print}' file
使用sed:
sed '/PATTERN/,+2!d' file
Perl one-liner
perl -ne 'print if (/PATTERN/ and $p=2) .. not $p--' file