grep tail and head 错误结果

grep tail and head wrong result

我想显示包含单词的前 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

此处输出:

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   The GNU C Library is distributed in the hope that it will be useful,
   or due to the implementation it is a cancellation point and
/* Try to acquire ownership of STREAM but do not block if it is not

您可以简单地附加 head 和 tail 的结果:

{ head -3 ; tail -2 ;} < /usr/include/stdio.h

你应该试试这个

grep -A 2 -B 3 "it" /usr/include/stdio.h

-A = 在匹配词的 2 行上下文之后 "it"

-B = 匹配词的 3 行上下文后 "it"

如果你真的需要正则表达式,你也可以添加 -W。

预期输出:

第 1 行

第 2 行

包含它的行

第 4 行

第 5 行

第 6 行

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