`
897371388
  • 浏览: 530338 次
文章分类
社区版块
存档分类
最新评论

Shell编程学习---第七篇:正则表达式

 
阅读更多
随着对unix和Linux熟悉程度的不断加深,需要经常接触到正则表达式这个领域。使用
shell时,从一个文件中抽取多于一个字符串将会很麻烦。例如,在一个文本中抽取一个词,
它的头两个字符是大写的,后面紧跟四个数字。如果不使用某种正则表达式,在shell中将不
能实现这个操作。
本章内容包括:
• 匹配行首与行尾。
• 匹配数据集。
• 只匹配字母和数字。
• 匹配一定范围内的字符串集。
当从一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式(RE) ,正则表达式
是一些特殊或不很特殊的字符串模式的集合。
为了抽取或获得信息,我们给出抽取操作应遵守的一些规则。这些规则由一些特殊字符
或进行模式匹配操作时使用的元字符组成。也可以使用规则字符作为模式中的一部分进行搜
寻。例如, A将查询A,x将查找字母 x。
系统自带的所有大的文本过滤工具在某种模式下都支持正则表达式的使用,并且还包括
一些扩展的元字符集。这里只涉及其中之一,即以字符出现情况进行匹配的表达式,原因是
一些系统将这类模式划分为一组形成基本元字符的集合。这是一个好想法,本书也采用这种
方式。
本章设计的基本元字符使用在grep和sed命令中,同时结合{\\}(以字符出现情况进行匹配
的元字符)使用在awk语言中。

7.1使用句点匹配单字符
句点“.”可以匹配任意单字符。例如,如果要匹配一个字符串,以beg开头,中间夹一个
任意字符,那么可以表示为beg.n, “.”可以匹配字符串头,也可以是中间任意字符
注意, “.”允许匹配ASCII集中任意字符,或为字母,或为数字。

7.2 在行首以^匹配字符串或者字符序列
^只允许在一行的开始匹配字符或单词


7.3 在行尾以$匹配字符串或字符
可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。假定要匹配以
单词trouble结尾的所有行,操作为:trouble$
类似的,使用1d$返回每行以1d结尾的所有字符串。
如果要匹配所有空行,执行以下操作:
^ $
具体分析为匹配行首,又匹配行尾,中间没有任何模式,因此为空行。
如果只返回包含一个字符的行,操作如下:
^ . $
不像空白行,在行首与行尾之间有一个模式,代表任意单字符。
如果在行尾匹配单词jet01,操作如下:
jet01$

7.4使用*匹配字符串中的单字符或其重复序列

7.5使用\屏蔽一个特殊字符的含
有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。什么
是特殊字符?一般意义上讲,下列字符可以认为是特殊字符:
$.'"*[]^|()\+?
假定要匹配包含字符“.”的各行而“,”代表匹配任意单字符的特殊字符,因此需要屏蔽
其含义。操作如下:
\ .
上述模式不认为反斜杠后面的字符是特殊字符,而是一个普通字符,即句点。
假定要匹配包含^的各行,将反斜杠放在它前面就可以屏蔽其特殊含义。如下:
\ ^
如果要在正则表达式中匹配以 *.pas结尾的所有文件,可做如下操作:
\*\.pas
即可屏蔽字符*的特定含义。

7.6 使用[]匹配一个范围或集合
使用[ ]匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并
不强制要求这样做(一些系统提倡在复杂的表达式中使用逗号) ,这样做可以增加模式的可读
性。
使用“-”表示一个字符串范围,表明字符串范围从“-”左边字符开始,到“-”右边字
符结束。
如果熟知一个字符串匹配操作,应经常使用[]模式。
假定要匹配任意一个数字,可以使用:
[ 0 1 2 3 4 5 6 7 8 9 ]
然而,通过使用“-”符号可以简化操作:
[0-9]
或任意小写字母
[a - z]
要匹配任意字母,则使用:
[A-Za-z]
表明从A-Z、a-z的字母范围。
如要匹配任意字母或数字,模式如下:
[A-Za-z0-9]
在字符序列结合使用中,可以用 [] 指出字符范围。假定要匹配一单词,以s开头,中间有
一任意字母,以t结尾,那么操作如下:
s[a-z A-Z]t
上述过程返回大写或小写字母混合的单词,如仅匹配小写字母,可使用:
s [ a - z ] t
如要匹配Computer或computer两个单词,可做如下操作:
[Cc]omputer
为抽取诸如 Scout、shout、bought等单词,使用下列表达式:
[ou] .*t
匹配以字母 o或u开头,后跟任意一个字符任意次,并以 t结尾的任意字母。
也许要匹配所有包含system后跟句点的所有单词,这里 S可大写或小写。使用如下操作:
[S,s]ystem\.
[ ]在指定模式匹配的范围或限制方面很有用。结合使用 *与[]更是有益,例如 [A-Za-Z] *将
匹配所有单词。
[A-Za-z]*
注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
[^a-zA-Z]
匹配任一非字母型字符,而
[^0-9]
匹配任一非数字型字符。
通过最后一个例子,应可猜知除了使用 ^,还有一些方法用来搜索任意一个特殊字符

7.7 使用\{\}匹配模式结果出现的次
使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用\{\},此模式有三种
形式,即:
pattern\{n\} 匹配模式出现n次。
pattern\{n,\} 匹配模式出现最少 n次。
pattern\{n,m} 匹配模式出现n到m次之间,n , m为0-255中任意整数。

常用的正则表达式


^ 对行首
$ 对行尾
^[the] 对以the开头行
[Ss]igna[lL] 对匹配单词 signal Signal signaL, SignaL
[Ss]igna[lL]\. 对同上,但加一句点
[ mayMAY] 对包含may大写或小写字母的行
^USER$ 对只包含USER的行
[tty]$ 对以tty结尾的行
\. 对带句点的行
^d..x..x..x 对对用户、用户组及其他用户组成员有可执行权限的目录
^[^l] 对排除关联目录的目录列表
[.*0] 对0之前或之后加任意字符
[000*] 对000或更多个
[iI] 对大写或小写I
[iI][nN] 对大写或小写i或n
[^$] 对空行
[^.*$] 对匹配行中任意字符串
^......$ 对包括6个字符的行
[a-zA-Z] 对任意单字符
[a-z][a-z]* 对至少一个小写字母
[^0-9\$] 对非数字或美元标识
[^0-0A-Za-z] 对非数字或字母
[123] 对1到3中一个数字
[Dd]evice 对单词device或Device
De..ce 对前两个字母为 De,后跟两个任意字符,最后为ce
\^q 对以^q开始行
^.$ 对仅有一个字符的行
^\.[0-9][0-9] 对以一个句点和两个数字开始的行
'"Device"' 对单词device
De[Vv]ice\. 对单词Device或device
[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编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr用法 119 第三部分 登录环境 第13章 登录环境 125 第14章 环境和shell变量 132 第15章 引号...

    LINUX与UNIX SHELL编程指南

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础...

    Linux Shell编程从初学到精通 第2版

    第3章 正则表达式 43 第4章 sed命令和awk编程 64 第5章 文件的排序、合并和分割 105 第6章 变量和引用 133 第7章 退出、测试、判断及操作符 157 第8章 循环与结构化命令 187 第9章 变量的高级用法 217 第10章...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四...

    Linux与UNIX Shell编程指南.rar

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础...

    shell 编程指南pdf

    第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52...

    Linux与UNIX Shell编程指南.

    第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础...

    LINUX与UNIX_Shell编程指南

    第7章 正则表达式介绍 第8章 grep家族 第9章 AWK介绍 第10章 sed 用法介绍 第11章 合并与分割 第12章 tr用法 第三部分 登录环境 第13章 登录环境 第14章 环境和shell变量 第15章 引号 第四部分 基础shell编程 第16章...

    Linux与unix shell编程指南.rar

    第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr用法 119 第三部分 登录环境 第13章 登录环境 125 第14章 环境和shell变量 132 第15章 引号...

    LINUX与UNIX SHELL编程指南(很全)

    第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52...

    Linux与unix shell编程指南

    第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52...

    Linux命令学习 shell pdf格式

    第七章 正则表达式介绍 第八章 grep家族 第九章 AWK介绍 第十章 sed用法介绍 第十一章 合并与分割 第十二章 tr用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和shell变量 第十五章 引号 第四部分 基础...

    学习shell必备(CN).chm

    1. 为什么使用shell编程? 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash变量是不区分类型...

    LINUX与UNIX SHELL编程指南 高清PDF

    第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52...

    LINUXshel详细l编程指南

    第7 章 正则表达式介绍 第8 章 grep家族 第9 章 AWK介绍 第10章 sed 用法介绍 第11章 合并与分割 第12章 tr用法 第13章 登录环境 第14章 环境和shell变量 第15章 引号 第16章 shell脚本介绍 第17章 条件...

    Linux与UNIX+Shell编程指南

    Linux与UNIX+Shell编程指南 第1章 文件安全与权限 第2章 使用find和xargs 第3章 后台执行命令 第4章 文件名置换 第5章 shell输入与输出 第6章 命令执行顺序 第7章 正则表达式介绍 。。。。。。。。。

    Linux与Unix Shell编程指南(PDF格式,共30章)

    第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52...

    Linux与unix shell编程指南(1-16)

    第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52...

Global site tag (gtag.js) - Google Analytics