Linux/Unix 下带示例的 Grep 命令17 Mar 2025 | 5 分钟阅读 'grep' 命令代表 "全局正则表达式打印"。grep 命令过滤文件的内容,使我们的搜索变得容易。 它是一个命令行实用程序,用于在纯文本数据组中搜索与正则表达式匹配的行。"grep" 这个名字来源于 ed 命令,它具有相同的效果。最初,grep 是为 Unix 操作系统设计的,但后来它适用于所有类 Unix 系统以及 OS 9 等其他系统。 grep 过滤器在一个文件中查找特定的字符模式,并显示包含该模式的所有行。如果模式参数中的字符具有对 shell 的特殊含义,则应将它们放在引号中。通常,如果模式参数不是普通字符串,我们必须将整个模式放在一个引号中。 在 [a-z] 这样的表达式中,减号 (-) cml 根据当前的排序顺序描述了一个范围。排序顺序可以为字符范围指定等效类以供使用。grep 命令在未提及文件时假定标准输入。 模式称为在文件中找到的正则表达式。该模式是在 egrep 或 ed 命令格式下的受限正则表达式。grep 命令应用了一个强大的非确定性算法。当我们只需要过滤大型日志文件时,它非常有用。 grep 的简史在被命名之前,grep 是 **Ken Thompson** 指定的一个秘密实用程序,用于在文件中查找多个模式。**Doug Mcllroy** 不知情地请 Thompson 指定这样一个函数。Thompson 回复说他会花一个晚上想出一个这样的实用程序。Thompson 花了一个小时左右改进和修复了他名为 "s" (或 search) 的程序中的错误。第二天,他将该函数呈现给了 Mcllroy,Mcllroy 说这正是他想要的。Thompson 的说法可能描述了人们认为 grep 命令是通宵完成的。 Thompson 使用 PDP-11 汇编语言指定了初始版本,以支持 **Lee E. McMohan** 检查《联邦主义者论文》文本,以确定每篇论文的作者。ed 文本编辑器支持正则表达式,但无法处理如此大的文本;Thompson 将该代码复制到一个独立工具中。他之所以选择 grep 这个名字,是因为在 ed 中,grep 命令会打印出与指定模式相同的每一行。grep 最初被添加到 Unix 4 版中,并被誉为“典型的软件工具”,Mcllroy 批准了 grep,并将其中的 Thompson 的“不可挽回地根深蒂固”的工具哲学融入 Unix。 grep 的实现在许多软件开发环境和操作系统中都存在一系列 grep 实现。早期版本包括 fgrep 和 egrep,它们是在 Unix 的第 7 版中引入的。egrep 版本支持 Alfred Aho 添加的扩展正则表达式的语法,该语法基于 Ken Thompson 的原始正则表达式实现。fgrep 版本使用 **Aho-Corasick 字符串匹配算法** 查找任何固定字符串列表。这些版本的二进制文件在现代系统中可用,通过调用 grep 或通过调用 grep 的 shell 脚本并添加正确的标志来使用,通常部署在 POSIX 系统上。 其他命令包括 "grep" 这个词,用于表示它们是查找工具,通常是那些依赖于正则表达式匹配的工具。例如,"pgrep" 这个实用程序会显示标题与提供的正则表达式相同的进程。
如何在 Linux 中安装 grep?Grep 几乎预装在所有 Linux 发行版中。但是,如果它在我们的系统中缺失,我们可以使用下面的命令在终端窗口中安装它。 带管道的 grep 'grep' 命令通常与管道 (|) 一起使用。 语法 示例 ![]() 查看上面的快照,grep 命令过滤掉了所有包含“9”的数据。 不带管道的 grep它也可以不带管道使用。 语法 示例 ![]() 查看上面的快照,grep 命令执行的工作与前面的示例相同,但没有使用管道。 grep 选项
语法 示例 ![]() 查看上面的快照,命令 "grep -v 9 marks.txt" 显示不包含我们的搜索词“9”的行。 语法 示例 ![]() 查看上面的快照,命令 "grep -i red exm.txt" 显示所有包含“red”的行,无论大小写。 语法 示例 ![]() 查看上面的快照,命令 "grep -A1 yellow exm.txt" 显示搜索到的行及其下一行;命令 "grep -B1 yellow exm.txt" 显示搜索到的行及其前一行;命令 "grep -C1 yellow exm.txt" 显示搜索到的行及其前一行和下一行。 下一个主题Linux comm |
我们请求您订阅我们的新闻通讯以获取最新更新。