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