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

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

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

如何在 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 命令搜索字符串

在 Linux 中查看文件内容

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

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

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

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

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

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

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

使用 Grep 搜索单个字符

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

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

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

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

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

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

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

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

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

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

在文件中搜索字符串

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

使用 fgrep 搜索多个模式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8. 如何忽略错误信息

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

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

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

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

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

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

除此之外,我们还可以在文件不可读时观察到相同的行为。因此,首先,使用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

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

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

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

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

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

Grep 忽略错误信息

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月7日 04:34
下一篇 2023年5月7日 04:34

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信