转载自:Linux Grep 正则表达式示例

grep 是 Linux 中用于文本处理的最有用和功能最强大的命令之一。在本文中,我们将探讨如何在 grep 的 GNU 版本中使用正则表达式的基础,该版本在大多数 Linux 操作系统中默认可用

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搜索紧随其后的bash字符串。

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

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

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

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中搜索包含acceptaccent的行:

grep 'acce[np]t' file.txt

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

以下模式将匹配包含除l之外的co.a字符串,.表示任意字符。例如cocacobalt的任意字符串组合,但不匹配包含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命令示例将匹配srightrightssright等。

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

echo right |  grep 's*right'
echo ssright |  grep 's*right'

以下是更高级的模式,它匹配所有以大写字母开头,以句点或逗号结尾的行。 .*正则表达式表示匹配任意数量的任何字符。

以下grep命令-E选项表示使用扩展正则表达式。^表示行的开始位置,[A-Z]表示 A 到大 Z:

grep -E '^[A-Z].*[.,]$' file.txt

?使前一字符成为可选,并且只能匹配一次。以下 grep 命令将同时匹配brightright

你会这里的?字符的前面多了反斜杠。如果你使用的是基本正则表达式则需要反斜杠转义?字符避免 shell 的解释与执行。

grep 'b\?right' file.txt

以下grep -E是使用扩展正则表达式的方式匹配'\b?right'模式,因此不需要转义那些有特殊含义的字符。

grep -E 'b?right' file.txt

+字符与上一项匹配一次或多次。 以下将匹配srightssright,但不匹配right

以下 grep 命令选项-E 表示使用扩展正则表达式,模式's+' 表示必须存在一个s或者多个s字符,没有上限。

grep -E 's+right' file.txt

大括号字符{}允许您指定确切的数字,匹配次数必须在指定的范围内。以下 grep 命令将匹配 3 到 9 位数字的整数。

在以下'[[:digit:]]{3,9}'模式中,[:digit:] 表示 0 到 9 的数字,[[:digit:]]则表示 [0-9],{3,9}表示匹配 3 到 9 次,即可行必须包含有 3 到 9 个连续的数字。

grep -E '[[:digit:]]{3,9}' file.txt

或运算

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

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

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

分组

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

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

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

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

grep -E '(fear)?less' file.txt

反斜杠表达式

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

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

以下模式将匹配单独的单词abjectobject。 如果嵌入较大的单词,则不会匹配这些单词:

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

Linux Grep 正则表达式示例相关推荐

  1. linux grep正则表达式与grep用法详解

    正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 功能:输入文件的每一行中查找字符串. 基本用法: grep [- ...

  2. linux grep 正则 id,Linux grep正则表达式

    正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外 ...

  3. linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解

    需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...

  4. linux grep正则表达式,grep中的正则表达式

    导读 grep是Linux中用于处理文件的工具之一.grep搜索输入文件,查找与正则表达式匹配的行,并将每个匹配的行标准输出. 正则表达式是匹配一组字符串的模式.模式由操作符.构造文字字符和具有特殊意 ...

  5. linux grep 正则表达式

    命令别名设置 惯用命令特别长的时候可以起一个别名 查看有哪些别名 #alias #alias rm='rm -i' 去掉命令别名 #unalias lm grep 可以解析一行文字,取得关键字,若该行 ...

  6. linux grep 正则表达式

    目录 1.grep命令 2.grep 与正则表达式 3.关于匹配的实例 4.grep实例 1.grep命令 功能:输入文件的每一行中查找字符串. 基本用法: grep [-acinv] [--colo ...

  7. Linux - grep -正则表达式

    目录 grep命令 常见选项: -o 选项 --> 只显示匹配的内容 -i 选项 --> 忽略大小写,都匹配显示出来 -n 选项 --> 给匹配的内容加行号 -v 选项: 反转查找, ...

  8. linux忽略大小写 grep,linux grep不区分大小写查找字符串方法

    grep用来过滤字符串信息,grep默认对字母大小写敏感,不过可以通过选项对grep屏蔽大小写敏感,该选项为 -i. 一.查看grep工具版本方法 图1 grep版本查询 二.grep -i 使用方法 ...

  9. linux将grep行注释,Linux grep命令的12个实用示例

    你曾经遇到过在文件中查找特定字符串或模式的任务,但是不知道从哪里开始查找?那么,这里是grep来救援! 12 Grep命令示例 grep是配备在Linux上的每一个分布的功能强大的文件搜索模式. 如果 ...

最新文章

  1. gnuplotx轴的logscale显示
  2. ajax 导出文件给 文件重新命名_Tanner LEdit 05 | 导出GDSII文件
  3. SpringBoot+MyBatisPlus+Echarts实现查询并显示平均时长占比饼状图
  4. 云计算(Cloud Computing)的前世今生
  5. 后缀自动机(SAM)构造实现过程演示+习题集锦
  6. 高质量SQL的30条建议!(后端必备)
  7. C语言基础入门:C-Free 5下载和安装详细教程
  8. Excel的数据导入到PB的DW中
  9. linux dd winpe,winpe/linux多重启动
  10. 融云集成一个聊天室页面(vue版本)
  11. 中国工商银行计算机专业笔试内容,中国工商银行的笔试一般考什么内容?
  12. ESP8266-Arduino编程实例-MQ3酒精传感器驱动
  13. 神州优车推出智慧交通开放平台 3年将投入3亿元
  14. 主流智能手机屏幕材质介绍 及 LCD闪屏现象分析
  15. Linux shell 更改为zsh一直shell not changed
  16. .NET C# winform窗体假死
  17. 实实在在,伴您同行丨实在“华夏行”第四站成渝站圆满举办!
  18. SAINT:一个基于transformer的知识跟踪模型
  19. ‘见附件/附件’怎么用英语说?
  20. java中三步表达式,Java中三目运算符之类型转换

热门文章

  1. bindingnavigator如何与datagridview绑定
  2. html页面json转成对象吗,将HTML表单转换为JSON对象
  3. am4针脚定义_AMD Zen架构AM4接口实物曝光:1331针
  4. CAPL(vTESTStudio) - CAPL控制RS232继电器
  5. CommandType枚举的TableDirect
  6. 常用CMD批处理命令
  7. [长期更新]TOEFL听力词汇改写
  8. 关于方法论在生活上用途问题
  9. 云演ctf--可爱的emoji
  10. Java中DataBaseMetaData与ResultMetaData基本使用