如何在linux上使用grep命令

Linux grep命令是一个字符串和模式匹配实用程序,它显示来自多个文件的匹配行。它还可以处理其他命令的管道输出。我们教你怎么做。...

Linux grep命令是一个字符串和模式匹配实用程序,它显示来自多个文件的匹配行。它还可以处理其他命令的管道输出。我们教你怎么做。

格雷普背后的故事

grep命令在Linux和Unix界很有名,原因有三个。首先,它非常有用。第二,丰富的选择可能是压倒性的。第三,它是一夜之间写好的,以满足特定的需要。前两个是“砰”的一声;第三个是“砰”的一声。

kenthompson从ed编辑器(发音为eedee)中提取了正则表达式搜索功能,并为自己创建了一个小程序来搜索文本文件。他在贝尔实验室的部门负责人道格·麦克罗伊(Doug Mcilroy)找到汤普森,描述了他的一位同事李·麦克马洪(Lee McMahon)面临的问题。

麦克马洪试图通过文本分析来确定联邦党论文的作者。他需要一个可以在文本文件中搜索短语和字符串的工具。那天晚上,汤普森花了大约一个小时把他的工具变成了一个通用工具,可以被其他人使用,并把它改名为grep。他的名字来自ed命令字符串g/re/p,翻译成“全局正则表达式搜索”

你可以看汤普森和布莱恩·克尼根谈论格雷普的出生。

使用grep进行简单搜索

要在文件中搜索字符串,请在命令行中传递搜索项和文件名:

grep dave /etc/password in a terminal widnow

将显示匹配行。在这种情况下,它是一条单行线。匹配的文本将高亮显示。这是因为在大多数发行版上,grep的别名是:

alias grep='grep --colour=auto'

让我们看看有多行匹配的结果。我们将在应用程序日志文件中查找单词“Average”。因为我们无法回忆该单词在日志文件中是否为小写,所以我们将使用-i(忽略大小写)选项:

grep -i Average geek-1.log

将显示每个匹配行,并在每个行中突出显示匹配文本。

如何在linux上使用grep命令

我们可以使用-v(反转匹配)选项来显示不匹配的行。

grep -v Mem geek-1.log

如何在linux上使用grep命令

没有突出显示,因为这些是不匹配的行。

如何在linux上使用grep命令

我们可以让格雷普完全沉默。结果作为grep的返回值传递给shell。0的结果意味着找到了字符串,而一个结果意味着找不到字符串。我们可以使用$检查返回代码?特殊参数:

grep -q average geek-1.log echo $? grep -q howtogeek geek-1.log echo $?

如何在linux上使用grep命令

grep递归搜索

要搜索嵌套的目录和子目录,请使用-r(递归)选项。请注意,命令行上没有提供文件名,必须提供路径。我们在当前目录“.”和任何子目录中搜索:

grep -r -i memfree .

如何在linux上使用grep命令

输出包括每个匹配行的目录和文件名。

如何在linux上使用grep命令

我们可以使用-R(递归解引用)选项使grep跟随符号链接。我们在这个目录中有一个符号链接,叫做logs文件夹。它指向/home/dave/logs。

ls -l logs-folder

如何在linux上使用grep命令

让我们用-R(递归解引用)选项重复上一次搜索:

grep -R -i memfree .

如何在linux上使用grep命令

符号链接后面跟着,它指向的目录也会被grep搜索。

如何在linux上使用grep命令

搜索整词

默认情况下,如果搜索目标出现在某行的任何位置,包括另一个字符串中,grep将匹配该行。看看这个例子。我们要搜索“免费”这个词

grep -i free geek-1.log

如何在linux上使用grep命令

结果是包含字符串“free”的行,但它们不是单独的单词。它们是字符串“MemFree”的一部分

如何在linux上使用grep命令

要强制grep只匹配单独的“words”,请使用-w(word regexp)选项。

grep -w -i free geek-1.log echo $?

如何在linux上使用grep命令

这次没有结果,因为搜索词“free”不会作为单独的词出现在文件中。

使用多个搜索词

E(extended regexp)选项允许您搜索多个单词。(E选项替换了不推荐使用的grep的egrep版本。)

此命令搜索两个搜索词“average”和“memfree”

grep -E -w -i "average|memfree" geek-1.log

如何在linux上使用grep命令

将为每个搜索项显示所有匹配行。

如何在linux上使用grep命令

您还可以搜索不一定是整词的多个术语,但它们也可以是整词。

e(patterns)选项允许您在命令行上使用多个搜索词。我们正在利用正则表达式括号特性来创建一个搜索模式。它告诉grep匹配括号“[]”中包含的任何一个字符。这意味着grep在搜索时将匹配“kB”或“kB”。

如何在linux上使用grep命令

两个字符串都是匹配的,事实上,有些行同时包含这两个字符串。

007Ys3FFgy1gp5ixcyyu3j30hy0amgmy

精确匹配行

-x(行regexp)只匹配整行与搜索项匹配的行。让我们搜索一个只在日志文件中出现一次的日期和时间戳:

grep -x "20-Jan--06 15:24:35" geek-1.log

如何在linux上使用grep命令

找到并显示匹配的单行。

相反的是只显示不匹配的线条。这在查看配置文件时非常有用。评论很好,但有时很难在所有评论中发现实际的设置。以下是/etc/sudoers文件:

如何在linux上使用grep命令

我们可以有效地过滤出如下注释行:

sudo grep -v "#" /etc/sudoers

如何在linux上使用grep命令

这更容易分析。

仅显示匹配文本

可能有一种情况,你不想看到整个匹配行,只是匹配的文本。-o(仅匹配)选项就是这样做的。

grep -o MemFree geek-1.log

如何在linux上使用grep命令

显示减少为仅显示与搜索项匹配的文本,而不是整个匹配行。

如何在linux上使用grep命令

用grep计数

grep不仅仅是文本,它还可以提供数字信息。我们可以用不同的方式让格雷普对我们有价值。如果我们想知道一个搜索词在一个文件中出现了多少次,我们可以使用-c(count)选项。

grep -c average geek-1.log

如何在linux上使用grep命令

grep报告这个搜索词在这个文件中出现了240次。

您可以使用-n(行号)选项使grep显示每个匹配行的行号。

grep -n Jan geek-1.log

如何在linux上使用grep命令

每个匹配行的行号都显示在行首。

如何在linux上使用grep命令

要减少显示的结果数,请使用-m(max count)选项。我们将输出限制为五行匹配:

grep -m5 -n Jan geek-1.log

如何在linux上使用grep命令

添加上下文

对于每一条匹配线,能够看到一些额外的线(可能是不匹配的线)通常是有用的。它可以帮助区分哪些匹配的线是你感兴趣的。

要在匹配行之后显示一些行,请使用-A(在上下文之后)选项。在这个例子中,我们需要三行:

grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log

如何在linux上使用grep命令

要查看匹配行之前的一些行,请使用-B(context before)选项。

grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log

如何在linux上使用grep命令

要包含匹配行前后的行,请使用-C(context)选项。

grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log

如何在linux上使用grep命令

显示匹配的文件

要查看包含搜索项的文件的名称,请使用-l(具有匹配项的文件)选项。要找出哪些C源代码文件包含对sl.h头文件的引用,请使用以下命令:

grep -l "sl.h" *.c

将列出文件名,而不是匹配的行。

如何在linux上使用grep命令

当然,我们可以查找不包含搜索项的文件。-L(files without match)选项就是这样做的。

grep -L "sl.h" *.c

如何在linux上使用grep命令

行的开始和结束

我们可以强制grep只显示在一行开头或结尾的匹配项。“^”正则表达式运算符匹配行的开头。实际上,日志文件中的所有行都将包含空格,但我们将搜索第一个字符为空格的行:

grep "^ " geek-1.log

如何在linux上使用grep命令

将显示行首第一个字符为空格的行。

如何在linux上使用grep命令

要匹配行尾,请使用“$”正则表达式运算符。我们要搜索以“00”结尾的行

grep "00$" geek-1.log

如何在linux上使用grep命令

显示屏显示以“00”作为其最后字符的行。

如何在linux上使用grep命令

与grep一起使用管道

当然,您可以将输入通过管道传输到grep,将grep的输出通过管道传输到另一个程序,并将grep嵌套在管道链的中间。

假设我们希望在C源代码文件中看到字符串“ExtractParameters”的所有出现。我们知道会有很多,所以我们用管道把输出量减少到:

grep "ExtractParameters" *.c | less

如何在linux上使用grep命令

输出以较少的单位表示。

如何在linux上使用grep命令

这使您可以浏览文件列表并使用less的搜索工具。

如果我们将grep的输出通过管道传输到wc并使用-l(lines)选项,我们可以计算源代码文件中包含“ExtractParameters”的行数。(我们可以使用grep-c(count)选项来实现这一点,但这是演示grep外管道的一种简洁方法。)

grep "ExtractParameters" *.c | wc -l

如何在linux上使用grep命令

接下来的命令是,我们将从ls输出到grep,并将grep的输出管道化为sort。我们正在列出当前目录中的文件,选择其中包含字符串“Aug”的文件,并按文件大小对它们进行排序:

ls -l | grep "Aug" | sort +4n

如何在linux上使用grep命令

我们来分解一下:

  • ls-l:使用ls执行文件的长格式列表。
  • grep“Aug”:从ls列表中选择包含“Aug”的行。请注意,这还可以找到名称中包含“Aug”的文件。
  • sort+4n:对grep输出的第四列(filesize)进行排序。

我们得到了8月份修改的所有文件的排序列表(不考虑年份),按文件大小的升序排列。

相关:如何在Linux上使用管道

格雷普:少了指挥权,多了一个盟友

grep是一个非常好的工具,您可以随时使用。它可以追溯到1974年,现在仍然很强大,因为我们需要它所做的,没有什么比它做得更好。

把grep和一些正则表达式耦合起来,真的把它带到了一个新的层次。

相关:如何使用基本正则表达式更好地搜索和节省时间

  • 发表于 2021-04-02 17:23
  • 阅读 ( 166 )
  • 分类:互联网

你可能感兴趣的文章

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那么获取与存储上的文件相关的详细信息是很困难的。在这里,我们将讨论Linux上与ls命令相关的所有内容,以及它使用的一些不同的标志。 ...

  • 发布于 2021-03-26 18:01
  • 阅读 ( 187 )

启动linux的9个基本命令

... 如何在linux下打开终端 ...

  • 发布于 2021-03-26 18:33
  • 阅读 ( 226 )

如何检查linux内核和操作系统版本

...版本可以让您对安全更新做出重要决定。我们将向您展示如何找到这些,无论您使用哪个发行版。 滚动和点释放 你知道你在运行哪个版本的Linux吗?你能找到内核版本吗?Linux的滚动发行版,如Arch、Manjaro和openSUSE,经常使用自...

  • 发布于 2021-04-01 13:11
  • 阅读 ( 191 )

如何在linux上使用正则表达式(regex)

...在Linux上做了什么吗?他们给你命令行魔法!我们将教你如何施展正则表达式法术并提升你的命令行技能。 什么是正则表达式(regular expressi***)? 正则表达式(regex)是一种查找匹配字符序列的方法。它们使用字母和符号来定义...

  • 发布于 2021-04-02 11:27
  • 阅读 ( 221 )

如何在linux上使用history命令

...复您过去运行的命令。一旦您了解了Linux history命令以及如何使用它,它就可以显著地提高您的生产效率。 操纵历史 正如乔治桑塔亚纳(georgestantayana)的一句名言:“那些记不住过去的人注定要重蹈覆辙。”不幸的是,在Linux...

  • 发布于 2021-04-02 18:17
  • 阅读 ( 203 )

如何在linux上使用dmesg命令

...和术语。按less中的正斜杠“/”键启动搜索功能。 相关:如何在Linux上使用less命令 不再需要sudo 如果希望避免每次使用dmesg时都必须使用sudo,可以使用以下命令。但是,请注意:它允许任何拥有您的计算机用户帐户的人使用dmesg...

  • 发布于 2021-04-02 21:09
  • 阅读 ( 222 )

如何使用ls命令列出linux上的文件和目录

...命令之一。也许这是问题的一部分。有这么多的选择,你如何从中筛选出有用的呢?找到它们之后,你怎么记得它们? ls命令及其选项和参数字符串的有用排列是别名的最佳候选。实际上,在大多数发行版中,您认为的“裸”ls...

  • 发布于 2021-04-02 21:28
  • 阅读 ( 228 )

linux下如何用chfn和usermod修改用户数据

用户帐户不仅仅是用户名。了解如何从命令行设置和更改与Linux用户帐户关联的所有元数据。 名字里有什么? 如果您使用的是Linux或类似Unix的计算机,您将拥有一个用户帐户。指定给帐户的名称是您的用户帐户名。这是用于登...

  • 发布于 2021-04-02 21:38
  • 阅读 ( 165 )

如何在linux上编写fstab文件

...是你在任何地方都看不到你的新硬盘。为什么没有出现?如何让Linux“看到”驱动器以便开始配置它? 实际上,Linux已经看到了您的硬件,但它并没有很快宣布它。或者给你一个提示,它已经找到了你的新硬件。您必须询问Linux...

  • 发布于 2021-04-03 00:45
  • 阅读 ( 156 )

如何在linux上创建别名和shell函数

...才能继续存在。一旦窗口关闭,别名将消失。 那么我们如何使我们的别名永久化呢? .bashrc文件和别名 您可能想知道预打包的别名是在哪里定义的。它位于主文件夹的“.bashrc”文件中。当您启动交互式shell时,将读取此文件并...

  • 发布于 2021-04-03 03:45
  • 阅读 ( 210 )
pv4gi2Td
pv4gi2Td

0 篇文章

相关推荐