grep 正则2
- 基本正则表达式所定义的元字符
| 元字符 | 作用 | 例子 | 例子说明 |
|---|---|---|---|
| ^ | 行首定位符 | ^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选项)则不行。所以应该是扩展正则表达式中取消了这个需要转义字符的地方。
四、其他
琐碎的片段:
当需要将元字符当作普通字符匹配的时候,需要转移字符"\",但是当元字符位于"[]"中时,除了"-"或者"^"极少数元字符以外,其它的自动转义为普通字符。
正则表达式从左到右计算,遵循一定的优先级:转义符"\" > 方括号"[]" > 分组 "()" > 限定符"*,+,?,{}" > 普通字符 > 定位符"^,$" > 或"|"。
匹配同一种字符可能有多种正则表达式的写法。
shell本身不支持正则表达式,但是支持"*","?"等通配符。
支持正则表达式的还有sed命令,awk命令。以后可以详述。
作者:tyrone_li
链接:https://www.jianshu.com/p/6c04b85d4544
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
grep 正则2的更多相关文章
- grep 正则表达
常见的 grep 正则表达参数 -c # 显示匹配到得行的数目,不显示内容 -h # 不显示文件名 -i # 忽略大小写 -l # 只列出匹配行所在文件的文件名 -n # 在每一行中加上相对行号 -s ...
- shell grep正则匹配汉字
Shell grep正则匹配中文 测试文本 demo_exe.c,内容如下,需要注意保存的编码格式,对输出到终端有影响: 我们中文操作系统ASNI默认是GBK的. #include<stdio. ...
- liux三剑客grep 正则匹配
001正则匹配(大部分需要转义) ‘^‘: 锚定行首 '$' : 锚定行尾 [0-9] 一个数字 [^0-9] 除去数字所有,^出现在[]这里表示取反 [a-z] [A-Z] [a-Z] \s 匹配空 ...
- grep 正则问题 this version of PCRE is compiled without UTF support
问题 在使用grep -P,出现如下报错: grep: this version of PCRE is compiled without UTF support 原因 有些系统支持的正则规范不同. 解 ...
- sed与grep正则
string editor 流编辑器 sed编辑器是一行一行的处理内容,正在处理的内容存放在缓冲区内,处理完后 按照选项的规定进行输出或者修改文件 option: -n 静默模式结合p可以只输出修 ...
- [Linux] shell中for循环grep正则统计指定关键字
需求是统计某个业务的访问个数日志服务器上的目录结构是如下,搜索最近7天的指定关键字数据,并排重统计个数: drwxr-xr-x root root Nov : -- drwxr-xr-x root r ...
- linux grep 正则
grep : 显示匹配行 -v: 反显示 -e 使用扩展正则表达式 黑色字体表明是原生正则表达式 红色字体表明是扩张正则表达式 1.匹配操作符 \: 转义字符串(正则使用扩展字符操作 没有使用-e ...
- day11 grep正则匹配
ps aus | trep nginx # 查看所有正在运行的nginx任务 别名路径: alias test_cmd='ls -l' PATH路径: 临时修改: PATH=$PATH:/usr/lo ...
- Linux 命令 - grep: 正则搜索文本
grep 搜索文本文件中与指定正则表达式匹配的行 命令格式 grep [OPTIONS] PATTERN [FILE...] 命令参数 Generic Program Information --he ...
- grep 正则匹配
\{0,n\}:至多n次 \{\ 匹配/etc/passwd文件中数字出现只是数字1次到3次 匹配/etc/grub2.cfg文件以一个空格开头匹配一个字符的文件的所有行 显示以LISTEN结尾的行 ...
随机推荐
- linux100day(day6)--shell脚本简单逻辑
if语句: if条件语句的使用格式: 1.单分支语句 if 条件;then 执行语句 fi 2.双分支语句 if 条件;then 执行语句1 else 执行语句2 fi 3.多分支语句 if 条件;t ...
- SQLRecoverableException: I/O Exception: Connection reset
https://stackoverflow.com/questions/6110395/sqlrecoverableexception-i-o-exception-connection-reset T ...
- noip2018火柴棒等式
以下题目摘自洛谷p1149 给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA.BB.CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00).用火柴棍拼数字0-90− ...
- 九、结构模式之装饰(Decorator)模式
装饰模式又叫包装模式,装饰模式以客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.装饰模式可以在不使用创造更多的子类的情况下,将对象的功能加以扩展. 装饰模式结构图如下: 其包含的角色就分为: ...
- Tomcat8.0源码编译
最近打算开始研究一下Tomcat的工作原理,拜读一下源码.所以先从编译源码开始了.尽管网上有那么多的资料,但是总是觉得,自己研究一遍,写一遍,在动手做一遍能够让我们更加深入的了解.现在整个社会都流行着 ...
- 力扣—— Swap Nodes in Pairs(两两交换链表中的节点) python实现
题目描述: 中文: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, ...
- spring框架的一些测试思路
一.Spring Boot Actuators Spring Boot Actuator是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息. ...
- Elasticsearch:使用function_score及soft_score定制搜索结果的分数
我们将介绍使用function_score的基础知识,并介绍一些function core技术非常有用和有效的用例. 介绍 评分的概念是任何搜索引擎(包括Elasticsearch)的核心.评分可以粗 ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ(莫队+哈希)
传送门 解题思路 刚开始写了个莫队+哈希+\(map\)的\(O(n\sqrt(n)log(n)\)的辣鸡做法,\(T\)飞了.后来看了看别人博客发现其实并不用拿\(map\)当桶存那些哈希值.因为只 ...
- Docker Machine 管理-创建machine(16)
对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机.“创建 Machine” 指的就是在 host 上安装和部署 docker.先执行 doc ...