当前位置: 首页 > 科技观察

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

时间:2023-03-16 13:59:04 科技观察

文本搜索是最常执行的操作之一。然而,如果用户不熟悉正确的工具,这个简单的任务很快就会变得很耗时。在Linux中,有各种文本过滤实用程序,例如awk、sed、cut等。但是,在Linux中,fgrep是简单文本搜索的首选实用程序。在本指南中,我们将讨论一些可以在日常生活中使用的fgrep命令的实际示例。Linux中的fgrep命令属于grep命令家族。但是,它用于搜索固定的字符串模式而不是正则表达式。因此,该命令的名称是fgrep(固定GREP)。fgrep命令的语法类似于其他grep系列命令:$fgrep[options]pattern[file]首先,让我们创建一个包含以下内容的纯文本文件来使用示例:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$catlinuxmi.txt在Linux中查看文件内容这里我们可以看到文本文件已准备好,其中包含示例内容。现在让我们在接下来的几个示例中讨论fgrep命令的一些常见示例。1.fgrep与grep和egrep命令有何不同?顾名思义,fgrep命令用于搜索固定的字符串模式。它将模式解释为固定字符串而不是正则表达式。因此,它以节省时间的方式执行搜索操作。为了理解差异,让我们在grep命令中使用点(.)字符。这个简单的正则表达式匹配除行尾以外的任何单个字符:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$grepat.linuxmi.txt使用Grep在以下位置搜索单个字符在上面的输出中,我们可以看到点(.)字符与文本at、atc和att匹配。现在,让我们对fgrep命令使用相同的模式并观察结果:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrepat.linuxmi.txt在上面的输出中,我们可以看到命令找不到给定的模式。发生这种情况是因为fgrep命令无法识别正则表达式并尝试搜索不存在的模式–“at.”。2.如何在文件中搜索字符串让我们从一个基本示例开始,我们将在linuxmi.txt文件中搜索匹配的字符串:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrepmatcheslinuxmi.txt在文件中搜索字符串可以看到,有两个地方有两个匹配成功,用红色高亮显示。3.如何为匹配模式设置Grep输出颜色在前面的示例中,我们看到默认情况下,匹配模式以红色突出显示。但是,我们可以通过为GREP_COLOR环境变量分配不同的值来更改此行为。让我们将值32分配给GREP_COLOR环境变量,以绿色突出显示匹配模式:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$exportGREP_COLOR=32┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrepmatcheslinuxmi.txt为匹配模式设置Grep输出颜色现在,在继续下一个示例之前,取消设置GREP_COLOR环境变量以启用默认行为:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$unsetGREP_COLOR4.如何在一个文件中搜索多个模式有时,我们需要对多个字符串进行模式匹配。在这种情况下,我们可以在文本文件中提供模式而不是命令行参数。让我们创建一个在一行中包含多个模式的文本文件:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$catkotlin.txtnameglobs现在,让我们将这个文件转换为使用-f多模式匹配选项:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrep-fkotlin.txtlinuxmi.txt在上面使用fgrep搜索多模式的输出中,我们可以看到字符串professionals和website的模式匹配成功。5.如何限制一个文件中的匹配次数默认情况下,fgrep命令会继续执行模式匹配,直到处理完整个文件。但是,有时我们需要限制匹配的数量。在这种情况下,我们可以在命令中使用-m选项:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrep-m1filelinuxmi.txt在这个例子中,fgrep命令在匹配第一个模式后停止文件处理。6.查找模式时如何打印文件名有时我们只需要查找存在某种模式的文件名。这种情况下,我们可以使用fgrep命令的-l选项:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrep-lfilelinuxmi.txtlinuxmi.txt这里,我们您可以看到该命令仅打印文件名,而不打印具有匹配模式的行。7.模式匹配失败时如何打印文件名在前面的例子中,我们看到了模式匹配成功时如何打印文件名。现在,让我们看看如何反过来做。让我们尝试在文件中找到不存在的模式并观察结果:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrep-Lnon-existing-wordlinuxmi.txtlinuxmi.txt在这个例子中,我们使用了-L命令选项,如果模式匹配不成功,它会打印文件名。8.如何忽略错误信息错误处理在编写shell脚本时起着至关重要的作用。但是,在一些非关键场景中,我们可以放心地忽略错误信息。在fgrep中,我们可以使用-s选项来忽略与不存在或不可读文件相关的错误。为了更好地理解这种行为,让我们尝试在一个不存在的文件中搜索模式:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrep-skotlinnon-linux.txt┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$echo$?2?2在上面的输出中,我们可以看到该命令没有在标准错误流中显示任何错误。但是,失败由非零返回值报告。除此之外,当文件不可读时,我们也可以观察到相同的行为。因此,首先使用chmod命令修改文件权限:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$chmod000linuxmi.txt┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$ls-llinuxmi.txt------------1linuxmilinuxmi370Nov2019:03linuxmi.txt现在,尝试搜索模式并观察结果:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$fgrep-snamelinuxmi.txt┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$echo$?2?2Grep忽略错误信息