使用 `grep` 查看上下文

2025-06-10

使用 `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


Enter fullscreen mode Exit fullscreen mode


$ 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


Enter fullscreen mode Exit fullscreen mode

查看整个文件

查看整个文件的一个技巧是匹配每一行中的非打印字符,例如行首或行末。



grep -e '^' -e 'magic' example.txt


Enter fullscreen mode Exit fullscreen mode

结果显示整个文件,但包含单词

不过,这grep有点滥用。更好的方法可能是使用 的简洁搜索功能less。运行less example.txt,然后输入 ,/最后输入你的搜索词。如果你输入/magic<Enter>,你会看到类似这样的内容:

Less 显示整个文件,其中包含单词

没人:……

Vim 用户:您可以在 ViM 中做同样的事情!

*开玩笑的啦。我超爱 vim,而且一直都在用这个功能。

但我的没有颜色!

grep有一个--color选项。事实上,--colour对于那些有此需求的人来说,它甚至还有一个更方便的选项!它可以取值“never”、“always”或“auto”。如果输出到终端,“auto”会为输出添加颜色;如果输出通过管道传输到其他命令或文件,则会丢弃颜色。这是因为颜色会被编码为字符,直接写入输出文本中,并且会显示在纯文本输出文件和其他程序中,例如less。你会看到很多 StackOverflow 的答案推荐--color=always,但这会给你那些奇怪的颜色代码字符,这可能不是你想要的。

因此尝试运行:



grep --color=auto -e '^' -e 'my search term' data.txt


Enter fullscreen mode Exit fullscreen mode

如果可行,您可以考虑将此行放入您的.bashrc文件中:



export GREP_COLORS="auto"


Enter fullscreen mode Exit fullscreen mode

这样你就不必每次都输入它。

鏂囩珷鏉ユ簮锛�https://dev.to/rpalo/seeing-context-with-grep-39fb
PREV
使用 Python 进行数学艺术创作
NEXT
Ruby 概念 - 单例类