grep、egrep、fgrep 和 rgrep Linux 命令简介grep、egrep、fgrep 和 rgrep Linux 命令简介grep、egrep、fgrep 和 rgrep Linux 命令简介grep、egrep、fgrep 和 rgrep Linux 命令简介
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

grep、egrep、fgrep 和 rgrep Linux 命令简介

发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 系统上的 grep 命令是您会遇到的最常见命令之一。如果我们必须总结这个命令,我们会说它用于在文件内查找指定的字符串或文本。但即使有这样简单的解释,它的用途也是相当惊人的。

grep 命令还有一些近亲命令,以防您发现它无法胜任这项工作。这就是 egrep、fgrep 和 rgrep 这样的命令派上用场的地方。这些命令的工作方式与 grep 类似,但扩展了其功能,有时还简化了其语法。是的,一开始听起来很混乱。但不用担心,我们将在本指南中帮助您掌握 grep 命令的字母表。

在本教程中,我们将介绍 grep、egrep、fgrep 和 rgrep 的各种命令示例Linux。请继续阅读以了解这些命令的工作原理,并在我们进行过程中随意在您自己的系统上使用它们,以便您熟悉它们。

在本教程中您将学习:

  • grep、egrep、fgrep、rgrep 的命令示例

Linux 上的 grep、egrep、fgrep 和 rgrep 命令

grep

对于我们的示例,我们创建了一个名为 distros.txt 的简单文本文档,其中包含一堆 Linux 发行版的名称。请参阅下面我们如何使用 grep 及其相关命令来搜索该文件中的某些文本和模式。

  1. 如前所述,grep 可用于搜索文件中的字符串。让我们搜索“Ubuntu”这个词:

    $ grep Ubuntu distros.txt 
    Ubuntu
    
  2. 与 Linux 中的其他所有内容一样,grep 也区分大小写。要忽略大小写,我们需要结合使用 grep 和 -i 选项:

    $ grep -i ubuntu distros.txt 
    Ubuntu
    Kubuntu
    Xubuntu
    
  3. -n 选项将显示每个匹配项在哪个行号上找到。

    $ grep -i -n ubuntu distros.txt 
    3:Ubuntu
    8:Kubuntu
    9:Xubuntu
    
  4. 我们还可以使用 -v(反转)选项来显示与我们的搜索模式不匹配的行。

    $ grep -iv ubuntu distros.txt
    Arch Linux
    AlmaLinux
    Fedora
    Red Hat Enterprise Linux
    CentOS
    Linux Mint
    Debian
    Manjaro
    openSUSE
    
  5. 使用 -c 选项,grep 可以计算文件中字符串出现的次数。所以这里 grep 将打印 Ubuntu 没有出现在文件中的次数:

    $ grep -ivc ubuntu distros.txt
    9
    
  6. -x 选项将仅打印确切的出现次数。

    $ grep -ix ubuntu distros.txt
    Ubuntu
    
  7. 系统管理员在搜索日志文件时肯定会喜欢这个示例。 -B3 (在匹配之前显示 3 行)和 -A3 (在匹配之后显示 3 行)将为您的输出提供更多上下文。

    $ grep -B3 -A3 command /var/log/dmesg
    [    0.201120] kernel: pcpu-alloc: [0] 0 
    [    0.201186] kernel: Built 1 zonelists, mobility grouping on.  Total pages: 515961
    [    0.201188] kernel: Policy zone: DMA32
    [    0.201191] kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.8.0-59-generic root=UUID=a80ad9d4-90ff-4903-b34d-ca70d82762ed ro quiet splash
    [    0.201563] kernel: Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
    [    0.201648] kernel: Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
    [    0.201798] kernel: mem auto-init: stack:off, heap alloc:on, heap free:off
    

grep 和正则表达式

grep 和正则表达式是一个可以涵盖整本书的主题,但如果不展示至少几个 grep 和正则表达式的示例,那就太遗憾了。

  1. 要使 grep 仅返回包含数字的行,我们将使用以下命令:

    $ grep [0-9] file.txt
    
  2. 要使用 grep 计算文件中的所有空行,我们使用以下命令:

    $ grep -ch ^$ file.txt
    
  3. 让我们看看哪一行以“L”开头并以数字结尾。 ^ 用于匹配行首,$ 用于匹配行尾:

    $ grep ^L.*[0-9]$ file.txt
    
  4. 要使 grep 只匹配“b”是单词中第三个字符的行,我们可以使用以下命令:

    $ grep ..b file.txt
    

埃格雷普

egrep 是grep 的扩展版本。换句话说,egrep 等于grep -E。 egrep 支持更多正则表达式模式。

  1. 让我们搜索恰好包含两个连续“p”字符的行:

    $ egrep p{2} file.txt
    OR
    $ grep pp file.txt
    OR
    $ grep -E p{2} file.txt
    
  2. 让我们获取所有以“S”或“A”结尾的行的 egrep 命令的输出:

    $ egrep "S$|A$" file.txt
    

fgrep

fgrep 是 grep 的更快版本,它不支持正则表达式,因此被认为更快。 fgrep 等于grep -F。这在脚本或大型文件中使用非常方便,您不需要普通 grep 的额外稳健性,因为结果应该更快返回,并且对系统资源的影响更小。

  1. 您只能使用此工具进行简单的模式搜索,例如:

    $ fgrep Fedora distros.txt 
    Fedora
    
  2. 表达式将不起作用,只会返回空白输出。

    $ fgrep -i linux$ distros.txt 
    $ grep -i linux$ distros.txt 
    Arch Linux
    AlmaLinux
    Red Hat Enterprise Linux
    

rgrep

rgrep 是 grep 的递归版本。在这种情况下,递归意味着 rgrep 在 grep 指定模式时可以递归地遍历目录。 rgrep 与 grep -r 类似。

  1. 递归地搜索所有文件以查找字符串“linux”。

    $ rgrep -i linux *
    dir1/RHEL-based.txt:AlmaLinux
    dir1/RHEL-based.txt:Red Hat Enterprise Linux
    dir2/Debian-based.txt:Linux Mint
    

结束语

在本指南中,我们看到了 Linux 上 grep、egrep、fgrep 和 rgrep 的各种命令示例。从本质上讲,这些命令仅用于搜索一个或多个文件中的某些字符串模式。正如您从此处的示例中看到的,它们的功能可以轻松扩展,并应用于许多有用的场景。

©2015-2025 Norria support@norria.com