Mar*_*son 3277 search logging grep command-line-interface
我想要grep一个字符串,但也显示前面的五行和以下五行以及匹配的行.我怎么能这样做?
Pat*_*otz 4356
对于BSD或GNU, grep您可以使用它-B num来设置匹配前的-A num行数和匹配后的行数.
grep -B 3 -A 2 foo README.txt
Run Code Online (Sandbox Code Playgroud)
如果你想要使用之前和之后需要相同数量的行-C num.
grep -C 3 foo README.txt
Run Code Online (Sandbox Code Playgroud)
这将显示之前的3行和之后的3行.
Stu*_*Stu 600
-A并且-B将-C n(对于n上下文行)或仅-n(对于n上下文行)起作用.
dbr*_*dbr 38
grep astring myfile -A 5 -B 5
Run Code Online (Sandbox Code Playgroud)
这将为"astring"grep"myfile",并在每次匹配之前和之后显示5行
Tus*_*har 21
让我们用一个例子来理解。
\n我们可以使用 grep 和选项:
-A 5 # this will give you 5 lines after searched string.\n-B 5 # this will give you 5 lines before searched string.\n-C 5 # this will give you 5 lines before & after searched string\nRun Code Online (Sandbox Code Playgroud)\n例子。\nFile.txt包含6行,以下是操作。
\n-A 5 # this will give you 5 lines after searched string.\n-B 5 # this will give you 5 lines before searched string.\n-C 5 # this will give you 5 lines before & after searched string\nRun Code Online (Sandbox Code Playgroud)\n记住选项的技巧:
\n-A \xe2\x80\x83\xe2\x86\x92 A 表示“之后”-B \xe2\x80\x83\xe2\x86\x92 B 表示“ B之前”-C \xe2\x80\x83\xe2\x86\x92 C 表示“介于两者之间”Sam*_*ell 19
我通常使用
grep searchstring file -C n # n for number of lines of context up and down
Run Code Online (Sandbox Code Playgroud)
很多像grep这样的工具也有很棒的man文件.我发现自己经常提到grep的手册页,因为你可以用它做很多事情.
man grep
Run Code Online (Sandbox Code Playgroud)
许多GNU工具还有一个信息页面,除了手册页之外,它还可能包含更多有用的信息.
info grep
Run Code Online (Sandbox Code Playgroud)
Ros*_*ose 19
如果您经常搜索代码,AG 银色搜索器比 grep 更高效(即更快)。
您可以使用该-C选项显示上下文行。
例如:
ag -C 3 "foo" myFile
line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7
Run Code Online (Sandbox Code Playgroud)
Chi*_*nke 12
使用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
Run Code Online (Sandbox Code Playgroud)
小智 12
我以紧凑的方式做到这一点:
grep -5 string file
Run Code Online (Sandbox Code Playgroud)
这相当于:
grep -A 5 -B 5 string file
Run Code Online (Sandbox Code Playgroud)
小智 9
在"/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;
Run Code Online (Sandbox Code Playgroud)
Grep 有一个名为 的选项Context Line Control,您可以简单地使用--context其中的
| grep -C 5
Run Code Online (Sandbox Code Playgroud)
或者
| grep -5
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩
ripgrep如果您关心性能,请使用ripgrep与相似的语法grep,例如
rg -C5 "pattern" .
Run Code Online (Sandbox Code Playgroud)
-C,--context NUM-在每次比赛之前和之后显示NUM行。
还有一些参数,例如-A/ --after-context和-B/ --before-context。
该工具建立在Rust的正则表达式引擎之上,这使其在大数据上非常高效。
这里是@Ygor解决方案中awk
awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=3 a=3 s="pattern" myfile
Run Code Online (Sandbox Code Playgroud)
注意:用前后的行数替换a和b变量。
它对于不支持 grep 的-A,-B和-C参数的系统特别有用。
$ grep thestring thefile -5
Run Code Online (Sandbox Code Playgroud)
-5获取5匹配 'thestring' 相当于-C 5or 的上方和下方的行-A 5 -B 5。
| 归档时间: |
|
| 查看次数: |
1040012 次 |
| 最近记录: |