我想grep
输入一个字符串,但还要显示前五行和后五行以及匹配的行。我将如何做到这一点?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
我想grep
输入一个字符串,但还要显示前五行和后五行以及匹配的行。我将如何做到这一点?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
Answers:
对于BSD或GNU, grep
您可以使用-B num
设置匹配之前的-A num
行数以及匹配之后的行数。
grep -B 3 -A 2 foo README.txt
如果您希望前后使用相同数量的行,则可以使用-C num
。
grep -C 3 foo README.txt
这将在前面显示3行,在后面显示3行。
-A
并且-B
会-C n
(对于n
上下文行)或仅-n
(对于n
上下文行...只要n为1到9)都可以工作。
-n
格式,发现它只能工作到9
。因为15
它返回了5条线
-A
,-B
或-C
)。通常,选项说明符后跟一个值(-o a.out
在GCC中指定输出文件),但它也可以用作简单的switch /标志(-g
在GCC中启用调试信息)。但是选项之间的空格是可选的,因此对于没有值的选项,可以将它们合并(-ABC
),这意味着将对其-15
进行解释-1 -5
(两个单独的选项)并-5
覆盖-1
。
ack使用与grep类似的参数,并接受-C
。但是通常通过代码搜索会更好。
grep
,不确定使用它来“做广告” ack
(确实是一个很好的工具)是一个好主意……
grep astring myfile -A 5 -B 5
将grep“ myfile”替换为“ astring”,并在每次匹配之前和之后显示5行
使用grep
$ grep --help | grep -i context
Context control:
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
-NUM same as --context=NUM
在“ /some/file.txt”中搜索“ 17655”,以显示前后10行的上下文(使用Awk),输出前带有行号,后跟冒号。当'grep'不支持“-[ACB]”选项时,在Solaris上使用此选项。
awk '
/17655/ {
for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
print before[i]
}
print (NR ":" ($0))
a = 10
}
a-- > 0 {
print (NR ":" ($0))
}
{
before[b] = (NR ":" ($0))
b = (b + 1) % 10
}' /some/file.txt;