• 基本正则表达式所定义的元字符
元字符 作用 例子 例子说明
^ 行首定位符 ^ty 匹配"t"开头,后面紧跟一个"y"的字符串
$ 行尾定位符 txt$ 匹配以"t"结尾,前面两个字符是"t""x"的字符串
. 单个字符匹配 s. 匹配"s"后面有一个字符的字符串
* 限定符 s* "*"表示匹配其前导字符若干次,包括0次。这里是匹配有若干个"s"的字符串
[] 字符集匹配 [abc] 表示匹配"a","b"或"c"的字符串
[^] 字符集不匹配 [^abc 表示不匹配"a","b","c"里的任意字符
() 子表达式 ([0-9]{2})? 匹配两个或0个数字
x{m,n} 区间表达式 a{2,3} 表示"a"重复2~3次
  • 扩展正则表达式的元字符
元字符 作用 例子 例子说明
+ 限定符,同* s+ "+"表示匹配其前导字符若干次,至少1次
? 限定符 ss? "?"表示前面的字符可以重复0或1次。这里是一个"s"后面可能再跟一个"s"
  • POSIX字符集

不同国家的字符编码很有可能不同,例如:
LANG=C:A B C D ... Z a b c d ...z
LANG=zh_TW:a A b B c C d D ... z Z

当采用第二种编码时,[A-Z]之间会包括小写字母b-z。所以为了避免这种问题,可以使用POSIX字符集来使用特定的字符类。

字符类 说明
[:alnum:] 匹配任意一个字母或者数字,等价于A-Za-z0-9
[:alpha:] 匹配任意一个字母,等价于A-Za-z
[:digit:] 匹配任意一个数字,等价于0-9
[:lower:] 匹配小写字母,等价于a-z
[:upper:] 匹配大写字母,等价于A-Z
[:graph:] 匹配一个看的见的字符,不包括空白字符
[:print:] 匹配一个可以打印的字符
[:blank:] 匹配空格和tab
[:space:] 匹配一个空白字符,包括空格、tab、换行、分页符<
[:punct:] 匹配一个标点符号
[:xdigit:] 匹配一个十六进制数字,即0-9,a-f,A-F

【注意】这些字符类要放在方括号中,才能表示字符集匹配:[[:alnum:]] = [A-Za-z0-9]

三、grep与正则表达式的例子

(1)简单匹配

#匹配空行
egrep "^$" testfile #匹配所有英文字符
egrep "[a-zA-Z]" testfile #匹配tast或者test
egrep "t[ae]st" testfile
#匹配以字符s开头,紧跟若干b的文件名
ll | egrep "^sb*" #匹配txt文件
ll | egrep "\.txt$" #这里的"."需要进行转义

(2)复杂一些的匹配

#匹配QQ号码,第一位不能是0,5位以上的数字。
egrep "[1-9][0-9]{4,}" testfile #匹配IP地址,共4组数字,用"."隔开
egrep "^([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\. #第一组数字
([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\. #第二组数字
([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\. #第三组数字
([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" #第四组数字
testfile #匹配邮箱地址
egrep "^[a-z0-9]([a-z0-9]*[-_]?[a-z0-9]+)*@
([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$"

此处注意:区间表达式{}应该写成"\{\}"表示转义,实验中发现加不加"\"转义都能得出正确结果,但是直接使用基本正则表达式(grep不加-E选项)则不行。所以应该是扩展正则表达式中取消了这个需要转义字符的地方。

四、其他

琐碎的片段:

  1. 当需要将元字符当作普通字符匹配的时候,需要转移字符"\",但是当元字符位于"[]"中时,除了"-"或者"^"极少数元字符以外,其它的自动转义为普通字符。

  2. 正则表达式从左到右计算,遵循一定的优先级:转义符"\" > 方括号"[]" > 分组 "()" > 限定符"*,+,?,{}" > 普通字符 > 定位符"^,$" > 或"|"。

  3. 匹配同一种字符可能有多种正则表达式的写法。

  4. shell本身不支持正则表达式,但是支持"*","?"等通配符。

  5. 支持正则表达式的还有sed命令,awk命令。以后可以详述。

作者:tyrone_li
链接:https://www.jianshu.com/p/6c04b85d4544
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

grep 正则2的更多相关文章

  1. grep 正则表达

    常见的 grep 正则表达参数 -c # 显示匹配到得行的数目,不显示内容 -h # 不显示文件名 -i # 忽略大小写 -l # 只列出匹配行所在文件的文件名 -n # 在每一行中加上相对行号 -s ...

  2. shell grep正则匹配汉字

    Shell grep正则匹配中文 测试文本 demo_exe.c,内容如下,需要注意保存的编码格式,对输出到终端有影响: 我们中文操作系统ASNI默认是GBK的. #include<stdio. ...

  3. liux三剑客grep 正则匹配

    001正则匹配(大部分需要转义) ‘^‘: 锚定行首 '$' : 锚定行尾 [0-9] 一个数字 [^0-9] 除去数字所有,^出现在[]这里表示取反 [a-z] [A-Z] [a-Z] \s 匹配空 ...

  4. grep 正则问题 this version of PCRE is compiled without UTF support

    问题 在使用grep -P,出现如下报错: grep: this version of PCRE is compiled without UTF support 原因 有些系统支持的正则规范不同. 解 ...

  5. sed与grep正则

     string editor  流编辑器 sed编辑器是一行一行的处理内容,正在处理的内容存放在缓冲区内,处理完后 按照选项的规定进行输出或者修改文件 option: -n 静默模式结合p可以只输出修 ...

  6. [Linux] shell中for循环grep正则统计指定关键字

    需求是统计某个业务的访问个数日志服务器上的目录结构是如下,搜索最近7天的指定关键字数据,并排重统计个数: drwxr-xr-x root root Nov : -- drwxr-xr-x root r ...

  7. linux grep 正则

    grep : 显示匹配行 -v: 反显示 -e 使用扩展正则表达式 黑色字体表明是原生正则表达式 红色字体表明是扩张正则表达式 1.匹配操作符 \: 转义字符串(正则使用扩展字符操作  没有使用-e ...

  8. day11 grep正则匹配

    ps aus | trep nginx # 查看所有正在运行的nginx任务 别名路径: alias test_cmd='ls -l' PATH路径: 临时修改: PATH=$PATH:/usr/lo ...

  9. Linux 命令 - grep: 正则搜索文本

    grep 搜索文本文件中与指定正则表达式匹配的行 命令格式 grep [OPTIONS] PATTERN [FILE...] 命令参数 Generic Program Information --he ...

  10. grep 正则匹配

    \{0,n\}:至多n次 \{\ 匹配/etc/passwd文件中数字出现只是数字1次到3次 匹配/etc/grub2.cfg文件以一个空格开头匹配一个字符的文件的所有行 显示以LISTEN结尾的行 ...

随机推荐

  1. SQL数据库—<10>--查询练习题

    待整理···· 45题.分页查询 学生选课数据库SQL语句练习题(45个题) 练习题网盘地址:点我 create database xxb go use xxb go --表(一)Student (学 ...

  2. java 深入剖析ThreadLocal

    一.对ThreadLocal中的理解 ThreadLocal的,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多.可能很多朋友都知道的ThreadLocal为变量在每个线程中都创建 ...

  3. 转载:对比Angular/jQueryUI/Extjs:没有一个框架是万能的

    Angular不能做什么?对比Angular/jQueryUI/Extjs 框架就好比兵器,你得明白你手里拿的是屠龙刀还是倚天剑,刀法主要是砍,剑法主要是刺.对于那些职业喷子和脑残粉,小僧送你们两个字 ...

  4. [HTML知识体系]meta标签的常见用法

    1.meta是什么 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称 ...

  5. Python第一章概述与环境安装

    Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...

  6. 力扣——Next Permutation(下一个排列) python实现

    题目描述: 中文: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...

  7. RAM/ROM IP一次性总结

    1, 若需要修改memory mode, 需重新编译; 若不需要修改memory mode, 直接修改宏参数即可; 2, 宏参数列表: 3, 注意用LE搭memory的情况; 4, memory ty ...

  8. 阿里云异构计算团队亮相英伟达2018 GTC大会

    摘要: 首届云原生计算国际会议(KubeCon + CloudNativeCon,China,2018)在上海举办,弹性计算研究员伯瑜介绍了基于虚拟化.容器化编排技术的云计算操作系统PouchCont ...

  9. <自动化测试>之<SeleniumIDE使用详解 >

    最近在做些简单的自动化理解培训,以繁化简,就写了一节selenium ide的使用教程,在这里分享给刚入门的朋友 自动化插件工具介绍: 这是一款基于Firefox的自动化录制插件,UI界面化操作,无需 ...

  10. element-ul 处理 组件内的弹出框close问题

    <el-dialog custom-class="rental-pop" :close-on-click-modal="false" :append-to ...