分享最新优惠信息
购买主机更加划算

Linux系统使用fgrep命令搜索字符串的简单示例详解

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

但是,在Linux中,fgrep是简单文本搜索的首选实用程序,fgrep命令属于grep 命令家族,但它用于搜索固定字符串模式而不是正则表达式。因此,该命令的名称是fgrep(固定GREP)。在本文中,小编将简单介绍正确使用fgrep命令的一些示例。

其实,fgrep命令的语法类似于其他grep 系列命令,如下所示:

$ fgrep [OPTIONS] PATTERNS [FILES]

首先,创建一个包含以下内容的纯文本文件来使用fgrep示例,命令如下:

$ cat input.txt

在Linux系统中查找内容

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

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

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

为了理解差异,这里在grep命令中使用点(.)字符。这个简单的正则表达式匹配除行尾之外的任何单个字符:

$ grep ha. input.txt

用Grep搜索单个字符

在上面的输出中,可以看到点(.)字符与文本har、hat和has相匹配。

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

$ fgrep ha. input.txt

在输出结果可以看到,该命令无法找到给定的模式的匹配结果。出现这种情况是因为fgrep命令无法识别正则表达式并尝试搜索不存在的模式 – “ha.”

另外,Egrep或grep-E是grep另一扩展版本。Egrep在搜索正则表达式模式时高效且快速,因为它按原样处理元字符,而不像grep中那样将它们替换为字符串,因此无需将它们转义为在grep中,Egrep使用ERE或扩展正则表达式集。

所以,在Egrep的情况下,即使不转义元字符,它也会将它们视为特殊字符,并将其替换为其特殊含义,而不是将其视为字符串的一部分。

$ egrep -C 0 '(f|g)ile' check_file
$ egrep -C 0 '\(f\|g\)ile' check_file

在这里,当元字符没有转义时,egrep搜索“file”字符串,因为这意味着这些字符的含义。但是,当这些字符被转义时,egrep将它们作为字符串的一部分,并在文件中搜索完整的字符串“(f|g)ile”。

2、如何在文件中进行搜索

仍然从基本示例开始,现在将在input.txt文件中搜索字符串“professional”,命令如下:

$ fgrep professionals input.txt

如何在文件中进行搜索

正如上图所看到的,模式匹配在两个地方成功了,并以红色突出显示。

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

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

这里将值32分配给GREP_COLOR环境变量以突出显示绿色的匹配模式:

$ export GREP_COLOR=32
$ fgrep professionals input.txt

进行颜色设置

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

$ unset GREP_COLOR

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

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

这里创建一个文本文件,在单独的一行中包含多个模式,命令如下:

$ cat pattern.txt
professionals
website

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

$ fgrep -f pattern.txt input.txt

使用fgrep搜索多个模式

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

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

默认情况下,fgrep命令会继续执行模式匹配,直到处理完整个文件。但是,有时候需要限制匹配的数量。在这种情况下,可以在命令中使用-m选项:

$ fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

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

6、如何在搜索模式时显示文件名

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

$ fgrep -l professionals input.txt

input.txt

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

七、模式匹配失败时如何显示文件名

在前面的示例中,已经看到了如何在模式匹配成功时显示文件名。现在来看看如何以相反的方式执行操作。

这里尝试在文件中找到不存在的模式并观察结果:

$ fgrep -L non-existing-word input.txt

input.txt

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

八、如何抑制错误信息

在编写shell脚本时,错误处理起着至关重要的作用。但是,在一些非关键场景中,可以安全地忽略错误消息。在fgrep中,可以使用抑制与不存在或不可读文件相关的错误的-s选项。

为了更好地理解这种行为,现在尝试在不存在的文件中搜索模式:

$ fgrep -s professionals non-existing-file.txt
$ echo $?

2

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

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

$ chmod 000 input.txt 
$ ls -l input.txt

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

$ fgrep -s professionals input.txt 
$ echo $?

Grep忽略错误信息

总结

在本文中,小编简单介绍了fgrep命令的一些有用示例,Linux新手用户可以在日常生活中使用这些示例来提高使用Linux 工作效率。通过熟练掌握以上内容,Linux初学者将能够使用命令行界面高效地执行文本搜索操作。

以上fgrep命令的简单示例仅供参考,旨在帮助大家更好的使用fgrep命令进行搜索设置。如果你还有更好的演示示例,欢迎分享出来供大家参看。

未经允许不得转载:惠主机 » Linux系统使用fgrep命令搜索字符串的简单示例详解