使用 `grep` 查看上下文
您是否曾经在命令行中搜索文件中的某些文本,却发现 的grep
输出不足以让您了解文件中的内容?有时,您希望看到一些额外的行,甚至是整个文件,并高亮显示搜索词。
看几行
您可以使用 -A、-B 和 -C 标志查看上下文的几行。-A <number>
将在每次匹配后显示“number”行,-B <number>
将在匹配前显示“number”行,并-C <number>
在匹配前后显示“number”行。记住A fter、B efore 和C ontext 会很有帮助。grep -C 5 ...
它们等同于grep -A 5 -B 5 ...
。实际上,我也喜欢添加-n
标志来显示从 1 开始的行号,因为它可以帮助我稍后在文件中找到位置。
以下是他们的实际行动:
# inside example.txt
If you are a dreamer, come in,
If you are a dreamer, a wisher, a liar,
A hope-er, a pray-er, a magic bean buyer…
If you’re a pretender, come sit by my fire
For we have some flax-golden tales to spin.
Come in!
Come in!
- Shel Silverstein
$ grep -A 3 "fire" example.txt
If you’re a pretender, come sit by my fire
For we have some flax-golden tales to spin.
Come in!
Come in!
$ grep -B 2 -n "golden" example.txt
3-A hope-er, a pray-er, a magic bean buyer…
4-If you’re a pretender, come sit by my fire
5:For we have some flax-golden tales to spin.
$ grep -C 1 -n "bean" example.txt
2-If you are a dreamer, a wisher, a liar,
3:A hope-er, a pray-er, a magic bean buyer…
4-If you’re a pretender, come sit by my fire
查看整个文件
查看整个文件的一个技巧是匹配每一行中的非打印字符,例如行首或行末。
grep -e '^' -e 'magic' example.txt
不过,这grep
有点滥用。更好的方法可能是使用 的简洁搜索功能less
。运行less example.txt
,然后输入 ,/
最后输入你的搜索词。如果你输入/magic<Enter>
,你会看到类似这样的内容:
没人:……
Vim 用户:您可以在 ViM 中做同样的事情!
*开玩笑的啦。我超爱 vim,而且一直都在用这个功能。
但我的没有颜色!
grep有一个--color
选项。事实上,--colour
对于那些有此需求的人来说,它甚至还有一个更方便的选项!它可以取值“never”、“always”或“auto”。如果输出到终端,“auto”会为输出添加颜色;如果输出通过管道传输到其他命令或文件,则会丢弃颜色。这是因为颜色会被编码为字符,直接写入输出文本中,并且会显示在纯文本输出文件和其他程序中,例如less
。你会看到很多 StackOverflow 的答案推荐--color=always
,但这会给你那些奇怪的颜色代码字符,这可能不是你想要的。
因此尝试运行:
grep --color=auto -e '^' -e 'my search term' data.txt
如果可行,您可以考虑将此行放入您的.bashrc
文件中:
export GREP_COLORS="auto"
这样你就不必每次都输入它。
鏂囩珷鏉ユ簮锛�https://dev.to/rpalo/seeing-context-with-grep-39fb