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

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

文本搜索是最常执行的操作之一。然而,如果用户不熟悉正确的工具,这个简单的任务很快就会变得很耗时。在 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 搜索单个字符

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

现在,让我们对 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 搜索多个模式

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

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

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

7.模式匹配失败时如何打印文件名

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

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

┌──(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 忽略错误信息

责任编辑:赵宁宁 来源: Linux迷
相关推荐

2021-11-25 00:04:16

C# 插值字符串

2022-10-25 09:07:28

Linuxxargs命令

2018-05-16 10:32:06

Linux命令find

2018-06-26 09:15:24

Linux命令history

2022-11-18 10:16:26

Linuxwc 命令

2009-06-15 16:53:44

Groovy字符串gstring

2021-01-13 09:40:26

Linuxexport命令

2021-07-13 07:52:02

Linuxgrep命令

2019-09-16 19:00:48

Linux变量

2018-04-28 09:12:42

Linux

2021-07-20 10:00:28

Linuxgrep命令

2022-05-25 08:41:48

Linuxfd 命令文件

2017-12-11 13:50:17

LinuxBash子字符串

2020-09-07 07:35:03

Grep命令字符串

2022-03-30 09:32:32

BashtestLinux

2009-11-24 19:33:07

PHP字符串中加入变量

2022-11-23 08:14:42

bash 脚本test 命令

2021-01-14 05:13:34

倒排索引搜索

2009-08-07 14:22:56

C#字符串搜索

2018-07-26 09:55:44

Linux命令升级软件
点赞
收藏

51CTO技术栈公众号