分类: linux shell脚本学习2012-09-14 12:59 213人阅读 评论(0) 收藏 举报

当从一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式(R E) ,正则表达式是一些特殊或不很特殊的字符串模式的集合。

^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ] 内字符。可以是一个单字符,也可以是字符序列。可以使用 -表示[ ]内字符序列范围,如用 [ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在 s h e l l中一些元字符有
特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
p a t t e r n \ { n \ } 只用来匹配前面 p a t t e r n出现次数。n为次数
p a t t e r n \ { n,\ } m 只含义同上,但次数最少为 n
p a t t e r n \ { n,m \ } 只含义同上,但 p a t t e r n出现次数在n与m之间

句点"."匹配单字符
1) . : 匹配任意单ASCII 字符,可以为字母,或为数字。
2) 举例: ..XC..匹配deXC1t、23XCdf 等,.w..w..w.匹配rwxrw-rw-
行首以^匹配字符串或字符序列
1) ^ : 允许在一行的开始匹配字符或单词。
2) 举例: ^.01 匹配0011cx4、c01sdf 等,^d 匹配drwxr-xr-x、drw-r--r--等
行尾以$匹配字符串或字符
1) $ : 在行尾匹配字符串或字符,$符号放在匹配单词后。
2) 举例: trouble$ 匹配以单词trouble 结尾的所有行
^$匹配所有空行

使用*匹配字符串中的单字符或其重复序列(与文件名置换中的"*"不一样)
1) * : 一个单字符后紧跟*,匹配0 个或多个此单字符。
2) 举例: compu*t 将匹配字符u 一次或多次,即匹配computer computing compuuute 等
1033* 可以匹配 101333 10133 1013444 等
3) 在正则表达式中使用"*",有时会产生非预期的结果。

使用\屏蔽一个特殊字符的含义
1) \ : 用来屏蔽一个元字符的特殊含义。因为有时在shell 中元字符有特殊含义。\可以使其失去应有意义。
2) 举例: 在正则表达式中匹配以*.pas 结尾的所有文件: \*\.pas$

使用[]匹配属于一个范围或集合单个字符
1) [ ] : 匹配"[ ]"内的字符。可以是一个单字符,也可以是字符序列。可以使用"-"表示括号"[ ]"内字符序列范围,
如用[1-5]代替[12345]。可以用逗号","分隔括号"[]"内的字符。
2) 当"^"符号当直接靠着"[",意指否定或不匹配括号"[]"里内容
3) 举例: [0-9]匹配任意一个数字;[a-z]匹配任意一个小写字母;[0-9A-Za-z]匹配任意字母或数字;
[C,c]omputer 匹配Computer 和computer;[^a-zA-Z]匹配任一非字母型字符

使用"\{\}"匹配模式结果出现的次数
1) pattern\{n\}   : 匹配模式pattern 出现n 次的情形。
2) pattern\{n,\}  : 匹配模式pattern 最少出现n 次的情形。
3) pattern\{,m\}  : 匹配模式pattern 最多出现m 次的情形。
4) pattern\{n,m\} : 匹配模式pattern 出现次数在n 与m 之间的情形。
5) 举例: A\{2\}B 匹配的值为AAB
A\{2,\}B   匹配的值可以是AAB 或AAAAAB,但不能匹配AB
A\{2,4\}B  匹配的值可以是AAB、AAAB、AAAAB,但不能匹配AB 或AAAAAB 等
[0-9]\{4\}CX[0-9]\{4\}  匹配数字出现4 次后跟CX,最后是数字出现4 次的情形
6) 实际上真正的格式是 {n} {n,} {,m} {n,m},只不过对"{"和"}"应用了Esacpe 字符"\"。

经常使用的正则表达式举例
[Ss]igna[lL]   匹配单词signal、signaL、Signal、SignaL
[Ss]igna[lL]\. 同上,但加一句点
^USER$         只包含USER 的行
\.             带句点的行
^d..x..x..x    对用户、用户组及其他用户、组成员有可执行权限的目录
^[^l]          排除符号链接文件后的文件目录列表(即不是以"l"开始的行)
[yYnN]         大写或小写y 或n
^.*$           匹配行中任意字符串
^......$       包括6 个字符的行
[a-zA-Z]       任意单个字母
[a-z]*         至少一个小写字母
[^0-9\$]       非数字或美元符号
[123]          1 到3 中一个数字
\^q            以^q 开始行
^.$            仅有一个字符的行
^\.[0-9][0-9]  以一个句点和两个数字开始的行
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}               
日期格式dd-mm-yyyy
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}  类IP 地址格式
                                               
nnn.nnn.nnn.nnn
.*             匹配任意多个字符

shell之文本过滤(正则表达式)的更多相关文章

  1. shell之文本过滤(awk)

    shell之文本过滤(awk) 分类: linux shell脚本学习2012-09-19 15:53 1241人阅读 评论(0) 收藏 举报 shell正则表达式脚本任务语言 如果要格式化报文或从一 ...

  2. shell之文本过滤(grep)

    shell之文本过滤(grep) 分类: linux shell脚本学习2012-09-14 14:17 588人阅读 评论(0) 收藏 举报 shell正则表达式扩展工具存储 grep(全局正则表达 ...

  3. 任督二脉之Shell中的正则表达式

    VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...

  4. Shell中的正则表达式及字符串处理

    shell里一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所 ...

  5. Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...

  6. shell编程之正则表达式

    什么是正则表达式?正则表达式是用于描述字符排列和匹配模式的一种语法规则.在很多程序设计语言中都支持利用正则表达式来进行字符串的操作,不同语言中的正则表达式略有不同,但是毕竟都是正则,其本质思想都是一致 ...

  7. Shell学习笔记 - 正则表达式

    一.正则表达式是什么? 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作. 二.正则表达式与通配符 1. 正则表达式 用来在文件中匹配符合条件的字 ...

  8. shell脚本三——正则表达式

    shell函数:shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式:fun() { 命令 } Shell ...

  9. shell基础 -- 基本正则表达式

    正则表达式(Regular Expression,通常简称为 regex 或 RE)是一种表达方式,可以用它来查找匹配特定准则的文本.在许多编程语言中都有用到正则表达式,常用它来实现一些复杂的匹配.这 ...

随机推荐

  1. Python 笔试集(3):编译/解释?动态/静态?强/弱?Python 是一门怎样的语言

    面试题 解释/编译?动态/静态?强/弱?Python 到底是一门怎样的语言? 编译 or 解释? 编译.解释都是指将(与人类亲和的)编程语言翻译成(计算机能够理解的)机器语言(Machine code ...

  2. vue中的$EventBus.$emit、$on的应用

    今天在项目中遇到的一个需求: 在一个选项卡功能的页面,出现的问题是,当点击选项卡的某个选项时,会同时加载整个选项卡的数据,本身产品就很大,数据很多,所以这个问题无法忽略: 仔细研究下发现,当刚进入页面 ...

  3. linux/linux学习笔记-Shell基础(mooc)

    一.shell概述 shell根据ascII表,将命令翻译为0101...传给内核执行. 内核->shell翻译为命令->用户(操作的界面就是shell,shell=翻译官) linux标 ...

  4. 使用docker compose 构建多个镜像

    定义docker compose version: ' services: composedb: image: mysql/mysql-server container_name: composedb ...

  5. [P5348]密码解锁

    Description 给一个长度为 \(n\) 的数组 \(a[1\dots n]\) ,满足 \(\sum_{m|x}a[x] = \mu(m)\),求 \(a[m]\). \(n\le 10^{ ...

  6. IntelliJ IDEA 部署 Web 项目,终于搞懂了!

    这篇牛逼: IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行. 最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse,为了 ...

  7. idea使用Vue的v-bind,v-on报错

    参考解决在WebStorm中使用Vue的v-bind,v-on报错 File-->Settings-->Editor-->Inspections-->XML 把 Unbound ...

  8. Django中Model进阶操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  9. Python 矩阵(线性代数)

    Python 矩阵(线性代数) 这里有一份新手友好的线性代数笔记,是和深度学习花书配套,还被Ian Goodfellow老师翻了牌. 笔记来自巴黎高等师范学院的博士生Hadrien Jean,是针对& ...

  10. kotlin学习(8)泛型

    泛型的声明 与Java不同的是,Kotlin要求类型实参要么被显示的说明,要么能被编译器推导出来.因为Java在1.5版本才引入泛型,所以为了兼容过去的版本,可以不直接声明List类型的变量,而不说明 ...