如何在 Linux 中使用 Grep 命令

用实际例子理解grep命令,轻松过滤和显示文件内容

GREP 代表“全局正则表达式打印”。它是 Linux 提供的一个有用的命令行实用程序,用于搜索与用户提供的模式匹配的文本行。

格雷普 以用户希望在特定文件中搜索的字符串或单词的形式获取用户的输入。该命令然后检查用户指定的文件是否有此模式,然后返回与提供的模式匹配的行。

它通过过滤文件的内容做得非常出色,从而使我们的任务更容易同时搜索单个或多个文件的特定内容。

在本文中,让我们回顾一下 格雷普 命令并详细介绍了一些实际示例。

可用选项 格雷普 命令

这些是您将经常使用的一些基本选项 格雷普 命令。

选项描述
-一世对于不区分大小写的搜索
-r递归搜索指定目录及其子目录中的所有文件
-C显示字符串出现的总次数
-v显示不匹配的行
-w过滤单独使用的特定单词

使用 格雷普 命令

格雷普 命令通常与管道(|) 公用事业。当你想将它与其他一些 Linux 命令一起使用时,它可以通过 shell 管道来实现。虽然, 格雷普 也可单独使用,无需管道(|) 公用事业。

让我们看看一些基本的语法 格雷普 带和不带管道实用程序的命令。

让我首先向您展示我将用来说明 格雷普 命令。

印度是一个热爱和平的美丽国家。印度立于立法、行政和司法三大支柱之上。印度是一个热爱和平的美丽国家。印度关心人民,因为它的资源笛卡尔坐标是所有笛卡尔坐标的重要性。以下是两个空行。使用牛车在村里干农活很常见。这是示例文件的结尾。

格雷普 与管道 ( | ) 一起使用公用事业

格雷普 命令可以与使用 shell 管道的其他 Linux 命令一起实现。就像,使用 命令显示文件的内容,但同时使用管道输出 格雷普 命令仅显示您希望看到的内容。当我们通过示例时,这将更加清楚。

句法:

[命令] | grep [字符串]

例子:

猫样本.txt |立法机关

在这里,我使用了 命令显示“sample.txt”文件中的一些行。仅显示包含“立法机关”一词的行,而忽略其余行。

输出:

gaurav@ubuntu:~/workspace$ cat sample.txt | grep 印度立法机关立于立法机关、行政机关和司法机关的三大支柱之上。 gaurav@ubuntu:~/workspace$

格雷普 不使用管道 ( | )公用事业

格雷普 甚至可以直接用作单独的命令而不使用管道( | ) 公用事业。

句法:

grep [string_to_be_searched] [文件名]

例子:

grep 印度样本.txt

输出:

印度是一个热爱和平的美丽国家。印度将人民视为资源

因此,我使用了 格雷普 命令直接从文本文件“sample.txt”中过滤包含字符串“India”的行。

不区分大小写的搜索使用 格雷普 命令

当我们在终端上触发命令时,Linux 对区分大小写非常谨慎。这需要用户小心放入命令中的字符串的大小写。

让我们通过一个例子来了解这一点。

grep 和平示例.txt

在这种情况下,我们不会得到输出,因为示例文件中不存在“peace”这个词。我们有大写“P”的“和平”这个词。这个词是一样的,但是当我们使用 格雷普 命令不带任何选项,它会在文件中搜索完全匹配的内容,不考虑字母大小写中的任何更改。

为了避免这种歧义,您可以简单地使用 -一世 选项从字面上告诉 格雷普 命令 “忘记我将字符串放入的情况,只需搜索文件中的所有匹配模式即可。”

句法:

grep -i [字符串] [文件名]

例子:

grep -i 和平样本.txt

输出:

印度是一个热爱和平的美丽国家。印度是一个热爱和平的美丽国家。

无论匹配字符串是什么情况,都会显示所有匹配的行。

递归搜索使用 格雷普 命令

-r option 将搜索目录中的所有文件及其所有与用户在命令中提供的字符串模式匹配的子目录。

句法:

grep -i -r [字符串] [文件路径]

例子:

grep -i -r tomcat /home/gaurav/workspace

这里的字符串是“tomcat”,它将在目录工作区中搜索。 “workspace”目录中的所有子目录和文件也将被扫描以匹配提供的字符串模式。

输出:

./context_log.policy://catalina.policy - Tomcat 7 的安全策略权限 ./context_log.policy:// 注意:如果 tomcat-juli.jar 在 ${catalina.base} 而不是在 ${catalina.home }, ./context_log.policy:// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..} ./context_log.policy:grant codeBase "file:${catalina.home }/bin/tomcat-juli.jar" { ./context_log.policy: 权限 java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server"; ./context.xml: ./catalina.properties:# - Tomcat Bootstrap JARs ./catalina.properties:# - Tomcat API JARs ./catalina.properties:# - Tomcat JARs ./catalina.properties:# - 常见的非Tomcat JAR ./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar ./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true ./catalina.properties:# tomcat.util.buf.StringCache.char.enabled=true ./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000 ./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000 . /server.xml: pathname="conf/tomcat-users.xml" /> ./server.xml: 

笔记: 使用时 -r 选项与 格雷普 命令我们需要提供文件的路径而不是文件名

仅搜索整个单词 格雷普 命令

很多情况下,您将搜索一个词,但最终会用包含匹配词但不作为单个词的匹配行填充终端。您可能会看到包含一些单词的行,这些单词的子部分是您输入的字符串。

对此感到困惑?别担心,一旦你得到了这个例子,就更容易理解了。

例子:

在这里,我想搜索单个单词“cart”并在文件“sample.txt”中显示与该单词匹配的所有行。

grep -i 购物车示例.txt

输出:

笛卡尔坐标 所有笛卡尔坐标的重要性。使用牛车在村子里干农活是很常见的事。当男孩把它松动时,牛车不见了。

在输出中,您可以观察到单词“Cartesian”也包含单词“cart”,因此,即使我们不希望显示包含单词“Cartesian”的行,也会显示它们。

您可以使用 -w 选项与 格雷普 命令来解决这个歧义。

句法:

grep -i -w [字符串] [文件名]

例子:

grep -i -w 购物车示例.txt

输出:

使用牛车在村里干农活很常见。当男孩松手时,手推车不见了。 

现在,当你使用了—— 选项与 格雷普 你只会得到“购物车”这个词作为一个整体使用的行。

反向搜索使用 格雷普 命令

格雷普 命令也可以反向使用。我们可以使用 格雷普 通过隐藏匹配的行并仅显示未找到匹配的行来执行相反的命令。您可以使用 -v 选项与 格雷普 命令。

句法:

grep -i -v [字符串] [文件名]

例子:

grep -i -v 资源示例.txt

输出:

印度是一个热爱和平的美丽国家。印度立于立法、行政和司法三大支柱之上。印度是一个热爱和平的美丽国家。笛卡尔坐标 所有 th 笛卡尔坐标的重要性。使用牛车在村里干农活很常见。这是示例文件的结尾。

在输出中,除了包含单词“resource”的行之外,所有其他行都显示出来。

计算匹配字符串的出现次数

的输出 格雷普 如果文件中的数据很大,则命令通常很长。匹配越多,输出的时间越长 格雷普 命令。 Linux 为您提供了一个选项,您可以在其中显示匹配的出现次数。

句法:

grep -i -c [字符串] [文件名]

例子:

grep -i -c 印度样本.txt

输出:

gaurav@ubuntu:~/workspace$ grep -i -c india sample.txt 4 gaurav@ubuntu:~/workspace$

在这里,输出是一个数字,它是文件 sample.txt 中单词“India”的出现次数。

笔记: 我用过 -一世 每个示例中的选项只是为了安全处理大小写敏感问题。如果您确定要搜索的单词的大小写,那么您可以放心地省略 -一世 选项。

结论

我们已经了解了基本用法 格雷普 本教程中 Linux 系统上的命令。我们还学会了显示最适合我们要求的各种内容,而不是让终端拥挤不堪。 格雷普 如果用于扫描大型数据集,命令肯定会节省时间。