Linux grep尾部和头部错误结果

Linux grep尾部和头部错误结果,linux,grep,tail,head,Linux,Grep,Tail,Head,我想显示包含一个单词的前3行和后2行。 我尝试了grep命令,但它没有显示我想要的 grep-w it/usr/include/stdio.h | head-3 | tail-2 它只显示包含“It”的第2行和第3行。这里的问题是tail从不接收grep的输出,而只接收文件的前3行。要使这项工作可靠,您需要grep两次,一次使用head,一次使用tail或多路传输流,例如: grep -w it /usr/include/stdio.h | tee >(head -n3 > head

我想显示包含一个单词的前3行和后2行。 我尝试了grep命令,但它没有显示我想要的

grep-w it/usr/include/stdio.h | head-3 | tail-2


它只显示包含“It”的第2行和第3行。

这里的问题是
tail
从不接收
grep
的输出,而只接收文件的前3行。要使这项工作可靠,您需要
grep
两次,一次使用
head
,一次使用
tail
或多路传输流,例如:

grep -w it /usr/include/stdio.h |
tee >(head -n3 > head-of-file) >(tail -n2 > tail-of-file) > /dev/null
cat head-of-file tail-of-file
此处输出:

GNUC库是自由软件;您可以重新分发它和/或 根据GNU小公众的条款对其进行修改 分发GNU C库是希望它会有用, 或者由于实施,它是一个取消点,并且 /*尝试获取流的所有权,但如果不是,则不要阻止
您可以简单地附加head和tail的结果:

{ head -3 ; tail -2 ;} < /usr/include/stdio.h
{head-3;tail-2;}
您应该试试这个

grep -A 2 -B 3 "it" /usr/include/stdio.h
-A=在匹配单词“it”的两行上下文之后

-B=在匹配单词“it”的3行上下文之后

如果确实需要正则表达式,还可以添加-W

预期产出:

第1行

第2行

包含它的行

第4行

第5行


第6行

它可以工作,但我被要求只使用一个命令。我怎么能在头部和尾部两次grep呢?@avanabana:head
和tail是不行的,
sed
可以it@Thor那不是真的,见MahmoudKsemtinianswer@FernandoSantagata:有趣。但是,该解决方案只适用于从文件重定向,而不适用于管道,因此我认为我的观点仍然站在打印所有文件的位置,是否在整个文件中重复该词?如果是这样,那么整个文件可能就是输出。假设第二行匹配,那么第1行到第5行将被打印,下一个匹配在第5行,那么第6行到第8行将被打印,等等。您可以发布文件的剪报吗?它是位于/usr/include上的stdio.h文件
cat /usr/include/stdio.h | grep -w it | head -3 | tail -2