bash-如果找到模式,则打印两个连续的行

时间:2014-05-11 05:17:53

标签: bash awk grep

我需要在文件中搜索一个字符串,并将匹配的行与其下一行一起打印在另一个文件中。 例如:

输入文件:

>3456/1
A
>1234/2
B
>5678/1
C
>8976/2
D

搜索:/2

输出:

>1234/2
B
>8976/2
D

4 个答案:

答案 0 :(得分:4)

使用grep

$ grep -A1 '/2' file
>1234/2
B
--
>8976/2
D

来自man页面:

-A num, --after-context=num
             Print num lines of trailing context after each match.  

您可以将--移至grep -v '--',或者如果您拥有GNU grep,则可以删除$ grep --no-group-separator -A1 '/2' file >1234/2 B >8976/2 D ,然后您可以执行以下操作:

{{1}}

您可以将此命令的输出重定向到另一个文件。

答案 1 :(得分:1)

使用GNU sed

sed -n '/\/2/,+1p' file

示例:

$ sed -n '/\/2/,+1p' file
>1234/2
B
>8976/2
D

答案 2 :(得分:0)

使用grep -A

参见手册页:

 -A num, --after-context=num
         Print num lines of trailing context after each match.  See also the -B and -C options.
 -B num, --before-context=num
         Print num lines of leading context before each match.  See also the -A and -C options.
-C[num, --context=num]
         Print num lines of leading and trailing context surrounding each match.  The default is 2 and is equivalent to -A 2 -B 2.  Note: no whitespace may be given between the option and its argument.

以下是一个例子:

%grep -A2 /2 input
>1234/2
B
>5678/1
--
>8976/2
D

答案 3 :(得分:0)

以下grep是正确的工具,但使用awk可获得:

awk '/\/2/ {print $0;getline;print $0}' file
>1234/2
B
>8976/2
D

PS你应该发现这是你的自我,使用goolge。这被问过很多次。