0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用grep命令的多种搜索模式及搜索多个字符串

如意 来源:良许Linux微信公众号 作者:良许 2020-09-07 11:24 次阅读

大家好,我是良许!

今天向大家介绍一个非常有用的技巧,那就是使用 grep 命令查找多个字符串。

简单介绍一下,grep 命令可以理解为是一个功能强大的命令行工具,可以用它在一个或多个输入文件中搜索与正则表达式相匹配的文本,然后再将每个匹配的文本用标准输出的格式写出来。

因此,良许向大家分享一下如何使用 grep 命令的多种搜索模式以及使用 grep 搜索多个字符串:

多模式 Grep 命令

grep 命令支持三种正则表达式语法:Basic、Extended 和 Perl-compatible 。当没有指定正则表达式类型时,grep 命令将搜索模式默认为基本正则表达式。

要搜索多个匹配模式,可以使用 OR ( alternation ) 运算符。我们可以用 OR 运算符 |( pipe )指定不同的匹配项,这些匹配项可以是文本字符串,也可以是表达式集。值得注意的是,在所有正则表达式运算符中,这个运算符的优先级是最低的。

使用 grep 命令基本正则表达式搜索多个匹配模式的语法如下:

$ grep ‘pattern1\|pattern2’ filename

这里需要注意的是,始终要用单引号将正则表达式括起来,因为单引号内的内容原样输出,被单引号括起的内容不管是常量还是变量不会发生替换。

使用基本正则表达式时,元字符被解释为字面字符。要保留元字符的特殊含义,必须用反斜杠( \ )对它们进行转义。这就是为什么我们要转义 OR 运算符(|)。

要将模式解释为扩展正则表达式,请调用 grep -E(或 --extended-regexp )选项。使用扩展正则表达式时,不需要对 OR 运算符 (|) 进行转义:

$ grep -E ‘pattern1|pattern2’ file

Grep命令搜索多个字符串

通常我们认为,文字字符串是最基本的模式。

接下来我们将示例,搜索某用户日志错误文件中出现的所有 fatal、error 和 critical 字符串。语法如下:

$ grep ‘fatal\|error\|critical’ /var/log/nginx/error.log

还需要注意的是,如果要搜索的字符串包含空格,需要用双引号将其括起来。

下面是使用扩展正则表达式的同一个示例,它不需要转义字符:

$ grep -E ‘fatal|error|critical’ /var/log/nginx/error.log

默认情况下,grep 命令是区分大小写的。要在搜索时忽略大小写,请调用 grep 加 -i (或 --ignore-case )选项,示例如下:

$ grep -i ‘fatal|error|critical’ /var/log/nginx/error.log

当你只想搜索某个单词时,比如你想搜索的是单词 error ,grep 命令会输出所有包含 error 字符串的行,即它除了会输出包含 error 单词的行,还会输出包含 errorless 或 antiterrorists 等非 error 单词的行,这样是极不方便的。

因此要仅返回指定字符串是整词的行,或者是由非单词字符括起来的行,可以使用 grep 加 -w (或 --word-regexp )选项:

$ grep -w ‘fatal|error|critical’ /var/log/nginx/error.log

值得注意的是,单词字符包括有字母、数字字符(比如 a-z、a-Z 和 0-9 )以及下划线( _ ),所有其他字符都被视为非单词字符。

总结

在工作中,我们经常需要用到 grep 命令来搜索字符串,学会了使用 grep 搜索多个字符串这个技巧,一定有机会用上的。实际上,grep 命令远不止本文所讲的功能,如果你对 grep 命令的功能有任何疑问或者还想学习它的其他功能,请留言告诉我呗!
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11191

    浏览量

    208628
  • 操作系统
    +关注

    关注

    37

    文章

    6651

    浏览量

    123099
  • 字符串
    +关注

    关注

    1

    文章

    567

    浏览量

    20456
  • grep
    +关注

    关注

    0

    文章

    22

    浏览量

    4708
收藏 人收藏

    评论

    相关推荐

    如何在bash中分割字符串

    假设我们有一个由逗号或者下划线隔开的多个单词组成的字符串,需要拆分这个字符串提取各个单词。
    发表于 12-07 17:10 3640次阅读

    grep命令搜索字符串之技巧

    做嵌入式linux开发的,相信大家对source insight 再熟悉不过了,source insight非常强大,尤其当我们的工程浩大,想要搜索个字符串如函数、宏时,source
    发表于 12-17 23:34

    labview中已知4个字符串(每个字符串包含一个字符)如何随机排列?

    labview中已知4个字符串(每个字符串包含一个字符)如何随机排列?求大神给个程框图。
    发表于 01-22 15:43

    如何判断一个字符串开头?

    命令以“$Cmd,”开头,以“,”分隔,以“*”结尾。单片机回复以“$Message,”开头,以“,”分隔,以“*”结尾。如果错误这以“$Message,ERROR,”开头,以“,”分隔,以“*”结尾。我想问我如何判断一个字符串开头,判断一
    发表于 09-11 22:13

    UART_LOOP_查询接收多个字符串

    UART_LOOP_查询接收多个字符串源码
    发表于 01-21 11:11 6次下载

    Labview之搜索替换字符串

    Labview之搜索替换字符串,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:23 0次下载

    Linux中用grep命令搜索单词及统计匹配的行数

    使用 grep 命令搜索多个单词要使用 grep 命令
    发表于 04-02 14:46 614次阅读

    如何利用Java判断一个字符串是否包含某个字符

    如何利用Java通过不同的方法来判断一个字符串是否包含某个字符。 **2 ****方法** 1. .contains方法
    的头像 发表于 02-17 15:13 1431次阅读
    如何利用Java判断一<b class='flag-5'>个字符串</b>是否包含某<b class='flag-5'>个字符</b>

    C语言字符串的引用方式

    在C语言程序中,字符串是存放在字符数组中的。 2. 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一
    的头像 发表于 03-10 14:57 1806次阅读

    Python中检查字符串包含的方法

    Python 有多种处理字符串的方法。今天我们介绍如何检查一个字符串中是否包含另一个字符串
    的头像 发表于 05-14 16:02 1.6w次阅读

    KUKA机器人: 如何比较两个字符串变量

    用功能 StrComp() 可以比较两个字符串变量。 Comp = StrComp( StrComp1[], StrComp2[], CaseSens )
    的头像 发表于 07-10 09:27 906次阅读

    mysql字符串包含某个字符串

    将详尽、详实、细致地探讨MySQL中字符串包含的实现方法。 在MySQL中,可以通过使用内建函数和通配符来实现字符串包含的操作。下面将详细介绍几种常用的方法: 使用LIKE通配符: LIKE是MySQL中用于模式匹配的通配符,可
    的头像 发表于 11-16 14:52 3498次阅读

    linux搜索文件里的字符串

    在Linux系统中,我们可以使用各种方法来搜索文件中的字符串。在本文中,我将为您详细介绍几种常用的方法和工具。让我们开始吧! grep命令 grep
    的头像 发表于 11-23 10:20 1431次阅读

    oracle判断字符串包含某个字符

    包含某个字符,以及介绍使用的相关函数。 正文: 一、使用INSTR函数进行判断: INSTR函数是Oracle中最常用的字符串函数之一,它用于查找字符串中是否包含某个字符。INSTR函
    的头像 发表于 12-06 09:53 1.4w次阅读

    oracle字符串split成多个

    Oracle是一种广泛使用的关系型数据库管理系统,它提供了许多强大的功能和函数,用于处理和操作数据。其中之一就是字符串分割(split)方法,该方法用于将一个字符串按照指定的分隔符分割成多个
    的头像 发表于 12-06 09:54 4971次阅读