• 基本正则表达式所定义的元字符
元字符 作用 例子 例子说明
^ 行首定位符 ^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. linux100day(day6)--shell脚本简单逻辑

    if语句: if条件语句的使用格式: 1.单分支语句 if 条件;then 执行语句 fi 2.双分支语句 if 条件;then 执行语句1 else 执行语句2 fi 3.多分支语句 if 条件;t ...

  2. SQLRecoverableException: I/O Exception: Connection reset

    https://stackoverflow.com/questions/6110395/sqlrecoverableexception-i-o-exception-connection-reset T ...

  3. noip2018火柴棒等式

    以下题目摘自洛谷p1149 给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA.BB.CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00).用火柴棍拼数字0-90− ...

  4. 九、结构模式之装饰(Decorator)模式

    装饰模式又叫包装模式,装饰模式以客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.装饰模式可以在不使用创造更多的子类的情况下,将对象的功能加以扩展. 装饰模式结构图如下: 其包含的角色就分为: ...

  5. Tomcat8.0源码编译

    最近打算开始研究一下Tomcat的工作原理,拜读一下源码.所以先从编译源码开始了.尽管网上有那么多的资料,但是总是觉得,自己研究一遍,写一遍,在动手做一遍能够让我们更加深入的了解.现在整个社会都流行着 ...

  6. 力扣—— Swap Nodes in Pairs(两两交换链表中的节点) python实现

    题目描述: 中文: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, ...

  7. spring框架的一些测试思路

    一.Spring Boot Actuators Spring Boot Actuator是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息. ...

  8. Elasticsearch:使用function_score及soft_score定制搜索结果的分数

    我们将介绍使用function_score的基础知识,并介绍一些function core技术非常有用和有效的用例. 介绍 评分的概念是任何搜索引擎(包括Elasticsearch)的核心.评分可以粗 ...

  9. BZOJ 3207: 花神的嘲讽计划Ⅰ(莫队+哈希)

    传送门 解题思路 刚开始写了个莫队+哈希+\(map\)的\(O(n\sqrt(n)log(n)\)的辣鸡做法,\(T\)飞了.后来看了看别人博客发现其实并不用拿\(map\)当桶存那些哈希值.因为只 ...

  10. Docker Machine 管理-创建machine(16)

    对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机.“创建 Machine” 指的就是在 host 上安装和部署 docker.先执行 doc ...