Linux Grep 正则表达式

这篇具有很好参考价值的文章主要介绍了Linux Grep 正则表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

grep是Linux中用于文本处理的最有用和功能最强大的命令之一。grep在一个或多个输入文件中搜索与正则表达式匹配的行,并将每条匹配的行写入到标准输出

正则表达式是与一组字符串匹配的模式。模式由运算符,文字字符和元字符组成,它们具有特殊的含义。GNU grep支持三种正则表达式语法Basic,Extended和Perl-compatible。

当没有给出正则表达式类型时,grep以Basic的形式调用,grep将搜索模式解释为基本Basic正则表达式。要将模式解释为扩展Extended的正则表达式,请使用-E/–extended-regexp选项。

在GNU grep的实现中,基本正则表达式和扩展正则表达式语法之间在功能上没有区别,且两者一样。

唯一的区别是,在基本正则表达式中的元字符?,+,{,|,(和)被解释为文字字符,即不将这些字符作为正则解释。

为了在使用基本正则表达式时保持元字符的特殊含义,必须使用反斜杠\对字符进行转义。稍后我们将解释这些和其他元字符的含义。

通常,您应始终将正则表达式括在单引号中,以避免shell解释和执行元字符在shell在意义。

字符匹配

grep命令的最基本用法是在文件中搜索字符或字符串。除了在可以搜索文件的内容之外,grep还可以搜索标准输入的内容。

例如要搜索使用bash作为默认的登录shell用户,则可以在/etc/passwd文件中搜索包含bash字符串的所有行。

以下grep命令将搜索文件的内容,然后打印包含使用bash作为登录shell的用户:

grep bash /etc/passwd

输出应如下所示:

root:x:0:0:root:/root:/bin/bash
myfreax:x:1000:1000:myfreax:/home/myfreax:/bin/bash

在此示例中,字符串bash是一个基本的正则表达式,由四个字符组成。这告诉grep搜索紧随其后的b,a,s,h字符串。

默认情况下,grep命令区分大小写。这意味着将大写和小写字符视为不同的字符。要在搜索时忽略大小写,请使用-i/–ignore-case选项。

值得一提的是grep将搜索模式作为字符串而不是单词进行搜索/查找。因此,如果您要搜索gnu,grep还将打印在较大的单词中嵌入gnu的行。例如cygnus或magnum。

如果搜索一个完全限定的字符串或者包含空格的字符串,则需要将其用单引号或双引号引起来,这:

grep "Gnome Display Manager" /etc/passwd

行头与行尾

^ 脱字符号表示与行的开头的字符串匹配。如果正则表达式以^ 开头,grep将在每行的开头开始匹配^之后的字符串。

以下grep命令将从文件file.txt中搜索以字符串linux开头的行:

grep '^linux' file.txt

$ 美元符号与行的结尾字符串匹配。$ 之后表示你需要搜索的内容。grep将在每行的行尾匹配$之后的字符串。

以下grep命令将从文件file.txt中搜索以字符串linux结尾的行:

grep 'linux$' file.txt

除了搜索行的开头和结尾,您还可以组合使用由^关键词$构造的正则表达式。将允许搜索指定的内容,不是嵌入大字符串匹配的行。

另一个有用的例子是组合使用^$模式匹配所有空行,即开头与结束都没有内容。这在查找空行时特别有用。

以下grep命令将从文件file.txt中搜索仅包含linux的行:

grep '^linux$' file.txt

匹配单个字符

. 符号是与任何单个字符匹配的元字符。

例如,要包括kan,然后有两个字符并以字符串roo”结尾的任何内容,则可以使用以下模式:

grep 'kan..roo' file.txt

中括号表达式

[] 中括号表达式允许将字符括在中括号 [] 来匹配一组字符。即从中括号 [] 内的字符串任意使用一个字符来匹配行。

例如,以下grep命令将从文件file.txt中搜索包含accept或accent的行:

grep 'acce[np]t' file.txt

如果方括号内的第一个字符是符号^,则它将匹配方括号中未括起来的任意字符。

以下模式将匹配包含除l之外的co.a字符串,.表示任意字符。例如coca,cobalt的任意字符串组合,但不匹配包含cola的行 。

例如,以下grep命令将从文件file.txt中搜索不cola的行:

grep 'co[^l]a' file.txt

您可以通过指定以连字符分隔的范围的第一个和最后一个字符来构造范围表达式,在中括号表达式内指定一系列字符,而不是一个一个地写完所有字符。

例如,[a-e]等同于[abcde],[1-3]等同于[123]。以下表达式匹配以大写字母开头的每一行:

grep '^[A-Z]' file.txt

grep还支持中括号包含的预定义字符类别。[:alnum:]表示匹配单个数字与字母字符,与[0-9A-Za-z]一样。[:alpha:]表示匹配单个字母字符,与[A-Za-z]一样。

[:blank:]表示匹配单个空格和制表符。[:digit:]表示匹配单个数字0 1 2 3 4 5 6 7 8 9。

[:lower:]表示匹配单个小写字母字符,与[a-z]一样。[:upper:]表示匹配单个大写字母,与[A-Z]一样。

量词

量词可让您指定匹配项必须出现的次数,即匹配关键词可以被多次匹配。以下是一些GNU grep支持的量词。

  • 表示匹配零次或者多次。? 表示将前一项匹配零或一次,+ 表示匹配前一项一次或多次。{n}匹配前一项n次,n是数字。
    {n,}至少匹配n次。 {,m}最多匹配前一项m次。 {n,m}匹配前一项必须出现次数是从n-m次,如果是{2,4},即2至4次。

现在我们已经了解正则表达式的量词,接下来我们将使用量词作为示例。在grep使用量词进行搜索,以及如何避免shell解释特殊字符*,?等。

*字符与前面的字符匹配零次或多次。以下grep命令示例将匹配sright,right ,ssright等。

正则表达式sright的量词表示匹配s字符零次或者多次,即没有上限,可以是很多sssss。's*right’给正则表达式使用单引号,也是避免shell解释特殊字符的方式。

或运算

竖线|或运算符使您可以指定不同的可能匹配项,这些匹配项可以是文字字符串或正则表达式。在所有正则表达式运算符中,此运算符的优先级最低。

在下面的示例中,我们搜索Nginx的错误日志文件中出现单词fatal,error和critical行,如果使用扩展的正则表达式,则不需要对|进行转义。

grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log

分组

分组是正则表达式的一项功能,可让您将模式分组并将其作为引用。可使用括号()创建分组。使用基本正则表达式时,必须用反斜杠\对括号进行转义。

正则表达式可以有多个组。结果,匹配捕获的组通常保存在数组中,数组的成员与匹配的组顺序相同。这通常只是匹配组本身的顺序。

匹配的组保存在数组中,如果需要对捕获的组进行引用。可使用$1, …, $9对捕获的组进行引用。

以下示例同时匹配fear和less。 量词?使(fear)组成为可选。

反斜杠表达式

GNU grep包含几个由反斜杠和常规字符组成的元字符。以下是一些最常见的特殊反斜杠表达式。

\b匹配单词边界。<匹配单词开头的空字符串。>在单词末尾匹配一个空字符串。 \w匹配一个单词。\s匹配空格。

以下模式将匹配单独的单词abject和object。 如果嵌入较大的单词,则不会匹配这些单词:文章来源地址https://www.toymoban.com/news/detail-441595.html

grep '\b[ao]bject\b' file.txt

到了这里,关于Linux Grep 正则表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux学习之正则表达式元字符和grep命令

    cat /etc/redhat-release 看到操作系统的版本是 CentOS Linux release 7.6.1810 (Core) , uname -r 可以看到内核版本是 3.10.0-957.21.3.el7.x86_64 。 正则表达式是一种搜索字符串的模式,通俗点理解,也就是普通字符和元字符共同组成的字符集合匹配模式。正则表达式的主要作用是文本搜索和字符

    2024年02月14日
    浏览(38)
  • Linux三剑客(awk、sed、grep) 和 正则表达式

    本文章适用于一定工作经验(熟悉Linux基础)的同行,欢迎各位大佬批判指正。 上手三剑客(grep,sed,awk)之前,需要熟悉正则表达式, 正则表达式 ——事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的

    2024年02月15日
    浏览(40)
  • Linux系统三剑客之grep和正则表达式的介绍(一)

    1.正则表达式 目录 1.正则表达式 1.什么是正则表达式 ? 2.正则表达式的使用场景 3.正则表达式字符表示 4.它们之间的区别 2.grep命令 作用: 语法: 说明: 选项:options 重点 实例 3.后面的下次再更新。  1.什么是正则表达式 ? 一个正则表达式就是描述了一个字符串集合的方式

    2024年01月18日
    浏览(46)
  • 正则表达式与文本处理器

    文本处理器三剑客:grep(查找) sed  awk 正则表达式: 由一类特殊字符以及文本字符所编写的一种模式,处理文本当中的内容 其中的一些字符不表示字符的字面含义,这些字符表示控制或者通配的功能 通配符: 匹配文件名和目录名,不能匹配文件内容 正则表达式有两种匹

    2024年02月16日
    浏览(39)
  • linux | sort、uniq、history、xargs、grep 正则表达式(不深入)

    1.正则表达式 sort命令 #把内容读到内存,然后以行为单位进行排序并把结果输出到stdout(因为直接把排序结果输出,所以可以重定向),但是并不修改源文件内容。 参考如下 uniq命令 #流程和sort类似,也是把相邻的相同行去掉,最后输出。注意间隔的相同行无法去除。 如何把

    2024年02月16日
    浏览(33)
  • 2.1 python文本处理-正则表达式

    标准库模块 re 模块方法 # 将正则表达式样式编译成一个正则对象。一般用于多次使用正则对象的场景 re.compile( pattern ) # 扫描string字符串并查找符合patten样式的第一个位置,返回对应的 Match 结果,否则返回 None re.search(patten, string) # 如果  string  开头的零个或多个字符与正则

    2024年02月01日
    浏览(48)
  • Python 正则表达式:强大的文本处理工具

    正则表达式是一种强大的文本匹配和处理工具,它可以用来在字符串中查找、替换和提取符合某种规则的内容。在Python中,使用re模块可以轻松地操作正则表达式,它提供了丰富的功能和灵活的语法。 正则表达式在许多场景中都非常有用。以下是一些常见的应用场景: 数据清

    2024年02月09日
    浏览(41)
  • 正则表达式与正则可视化工具:解密文本处理的利器

    在计算机科学和软件开发领域,正则表达式是一种强大而灵活的文本处理工具。然而,对于初学者来说,正则表达式的语法和规则可能会显得晦涩难懂。为了帮助初学者更好地理解和学习正则表达式,正则可视化工具应运而生。本文将介绍正则表达式的基本概念、语法和应用

    2024年02月19日
    浏览(41)
  • Linux Shell 脚本编程学习之【第3章 正则表达式 (第二部分) grep命令】

    1、文本搜索工具 2、GREP 是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。 3、grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。模式中包含空格,则必须用双引号括起来。 选 项 意 义 -c 只输出匹配行

    2024年02月16日
    浏览(44)
  • Shell 正则表达式及综合案例及文本处理工具

     目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一串不包含特殊字符的正则表达式匹配它自己 例子,比如说想要查看密码包含root字符串的,可以这样写 cat /etc/passwd | grep root 特

    2024年01月17日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包