如何在 Linux 中使用 fgrep 命令搜索字符串

简介:在这份对 Linux 初学者友好的指南中,我们将讨论 fgrep 命令的一些实际示例。到本指南结束时,用户将能够使用命令行界面高效地执行文本搜索操作。

文本搜索是最常执行的操作之一。然而,如果用户不熟悉正确的工具,这个简单的任务很快就会变得很耗时。在 Linux 中,有各种文本过滤实用程序,例如 awk、sed、cut等。

但是,在 Linux 中,fgrep 是简单文本搜索的首选实用程序。在本指南中,我们将讨论可在日常生活中使用的 fgrep 命令的一些实践示例。

Linux 中的 fgrep 命令属于grep 命令家族。但是,它用于搜索固定字符串模式而不是正则表达式。因此,该命令的名称是fgrep(Fixed GREP)。

fgrep 命令的语法类似于其他 grep 系列命令:

$ fgrep [选项] 模式 [文件]

首先,让我们创建一个包含以下内容的纯文本文件来使用示例:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ cat linuxmi.txt

在 Linux 中查看文件内容

在这里,我们可以看到文本文件已准备好包含示例内容。现在让我们在接下来的几个示例中讨论 fgrep 命令的一些常见示例。

1. fgrep 与 grep 和 egrep 命令有何不同?

顾名思义,fgrep 命令用于搜索固定字符串模式。它将模式解释为固定字符串而不是正则表达式。因此,它以一种节省时间的方式执行搜索操作。

为了理解差异,让我们在 grep 命令中使用点(.)字符。

这个简单的正则表达式匹配除行尾之外的任何单个字符:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ grep at. linuxmi.txt
使用 Grep 搜索单个字符

在上面的输出中,我们可以看到点(.)字符与文本atatcatt匹配。

现在,让我们对 fgrep 命令使用相同的模式并观察结果:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep at. linuxmi.txt

在上面的输出中,我们可以看到该命令无法找到给定的模式。

发生这种情况是因为 fgrep 命令无法识别正则表达式并尝试搜索不存在的模式 – “at.”

2. 如何在文件中搜索字符串

让我们从基本示例开始,我们将在 linuxmi.txt 文件中搜索字符串 matches:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep matches linuxmi.txt
在文件中搜索字符串

正如我们所看到的,成功在两个地方匹配成功,并以红色突出显示。

3. 如何设置匹配模式的 Grep 输出颜色

在前面的示例中,我们看到,默认情况下,匹配的模式以红色突出显示。但是,我们可以通过为 GREP_COLOR 环境变量分配不同的值来改变这种行为。

让我们将值32分配给GREP_COLOR环境变量以高亮显示绿色的匹配模式:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ export GREP_COLOR=32
                                                                           
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep matches linuxmi.txt

为匹配模式设置 Grep 输出颜色

现在,在转到下一个示例之前,取消设置 GREP_COLOR 环境变量以启用默认行为:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ unset GREP_COLOR

4. 如何在一个文件中搜索多个模式

有时,我们需要对多个字符串进行模式匹配。在这种情况下,我们可以提供文本文件中的模式而不是命令行参数。

让我们创建一个文本文件,在单独的一行中包含多个模式:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ cat kotlin.txt 
name
globs

现在,让我们将此文件与-f多个模式匹配选项一起使用:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep -f kotlin.txt linuxmi.txt

使用 fgrep 搜索多个模式

在上面的输出中,我们可以看到字符串professionalswebsite的模式匹配成功。

5.如何限制文件中的匹配数

默认情况下,fgrep 命令会继续执行模式匹配,直到处理完整个文件。

但是,有时我们需要限制匹配的数量。在这种情况下,我们可以-m在命令中使用该选项:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep -m 1 file linuxmi.txt

在此示例中,fgrep命令在匹配第一个模式后停止文件处理。

6. 查找模式时如何打印文件名

有时,我们只需要找到存在特定模式的文件的名称。在这种情况下,我们可以使用 fgrep 命令的-l选项:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep -l file linuxmi.txt
linuxmi.txt

在这里,我们可以看到该命令只打印文件名而不是具有匹配模式的行。

七、模式匹配失败时如何打印文件名

在前面的示例中,我们看到了如何在模式匹配成功时打印文件名。现在,让我们看看如何以相反的方式执行操作。

让我们尝试在文件中找到不存在的模式并观察结果:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep -L non-existing-word linuxmi.txt
linuxmi.txt

在这个例子中,我们使用了-L当模式匹配不成功时打印文件名的命令选项。

8. 如何忽略错误信息

在编写 shell 脚本时,错误处理起着至关重要的作用。但是,在一些非关键场景中,我们可以安全地忽略错误消息。

fgrep中,我们可以使用-s 忽略与不存在或不可读文件相关的错误的选项。为了更好地理解这种行为,让我们尝试在不存在的文件中搜索模式:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep -s kotlin non-linux.txt         
                                                                          
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ echo $?                                                           2 ⨯
2

在上面的输出中,我们可以看到该命令没有在标准错误流中显示任何错误。但是,失败是由非零返回值报告的。

除此之外,我们还可以在文件不可读时观察到相同的行为。因此,首先,使用chmod命令修改文件权限:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ chmod 000 linuxmi.txt 
                                                                          
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ ls -l linuxmi.txt
---------- 1 linuxmi linuxmi 370 11月 20 19:03 linuxmi.txt

现在,尝试搜索模式并观察结果:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ fgrep -s name linuxmi.txt    
                                                                          
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ echo $?                                                           2 ⨯
2

Grep 忽略错误信息

在本文中,我们讨论了fgrep命令的一些有用示例。初学者可以在日常生活中使用这些示例来提高使用 Linux 工作时的工作效率。

您知道 Linux 中 fgrep 命令的其他最佳示例吗?请在下面的评论中告诉我们。

The post 如何在 Linux 中使用 fgrep 命令搜索字符串 first appeared on Linux迷.

版权声明:
作者:玉兰
链接:https://www.techfm.club/p/37173.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>