我需要在文件中搜索一个字符串,并将匹配的行与其下一行一起打印在另一个文件中。 例如:
输入文件:
>3456/1
A
>1234/2
B
>5678/1
C
>8976/2
D
搜索:/2
输出:
>1234/2
B
>8976/2
D
答案 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。这被问过很多次。