文档介绍:LINUX与UNIX SHELL编程指南
正则表达式
grep 家族
正则表达式
有些字符出现在搜索模式中,将具有特定的含义,这些特定含义的字符称为“元字符”。
使用元字符进行匹配的模式称为“正则表达式”
基本元字符集及其含义
. 只匹配任意单字符
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟*,匹配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,\ } 含义同上,但次数最少为n
p a t t e r n \ { n,m \ } 含义同上,但p a t t e r n出现次数在n与m之间
正则表达式介绍
使用句点匹配单字符
在行首以^匹配字符串或字符序列
在行尾以$匹配字符串或字符
使用*匹配字符串中的单字符或其重复序列
使用\屏蔽一个特殊字符的含义
使用[]匹配一个范围或集合
使用\{\}匹配模式结果出现的次数
使用句点匹配单字符
句点“.”可以匹配任意单字符。
例:如果要匹配一个字符串,以b e g开头,中间夹一个任意字符,那么可以表示为b e g . n,“.”可以是中间任意字符。
例:在ls -l命令中,可以匹配一定权限:
ls –l | grep . . x . . x . . x
例:假定正在过滤一个文本文件,对于一个有1 0个字符的脚本集,要求前4个字符之后为X C,
. . . .X C. . . .
注意:“.”允许匹配A S C I I集中任意字符,或为字母,或为数字。
在行首以^匹配字符串或字符序列
^只允许在一行的开始匹配字符或单词。
例:使用ls -l命令,并匹配目录。可用命令:ls -l | grep ^d
例:使用^ 0 0 1,结果将匹配每行开始为0 0 1的字符串或单词。
同时各种模式结合使用,例:^ . . . 4 X C . . . .
1234XC9088 - match
4523XC9001 - no match
在行尾以$匹配字符串或字符
可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。
例:要匹配以单词t r o u b l e结尾的所有行,操作为:
trouble$
例:如果要匹配所有空行,执行以下操作:^ $
具体分析为匹配行首,又匹配行尾,中间没有任
何模式,因此为空行。
例:如果只返回包含一个字符的行,操作如下:^ . $
不像空白行,在行首与行尾之间有一个模式,代
表任意单字符。
使用*匹配字符串中的单字符或其重复序列
一个单字符后紧跟*,匹配0个或多个此单字符
例: c o m p u * t 将匹配字符u零次或多次:
compute
compting
compuuuuuuute
例:.*表示任意字符串,^.*$可以匹配任意行。
使用\屏蔽一个特殊字符的含义
有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。什么是特殊字符?一般意义上讲,下列字符可以认为是特殊字符:
$ . ‘“* [ ] ^ | ( ) \ + ?
假定要匹配包含字符“.”的各行而“.”代表匹配任意单字符的特殊字符,因此需要屏蔽其含义。操作如下:\ .
上述模式不认为反斜杠后面的字符是特殊字符,而是一个普通字符,即句点。
假定要匹配包含^的各行,将反斜杠放在它前面就可以屏蔽其特殊含义。如下:\ ^
如果要在正则表达式中匹配以* . p a s结尾的所有文件,可做如下操作:\ * \ . p a s即可屏蔽字符*的特定含义。
使用[]匹配一个范围或集合
使用[ ]匹配特定字符串或字符串集,也可以使用“-”表示一个字符串范围,表明字符串范围从“-”左边字符开始,到“-”右边字符结束。
例:假定要匹配任意一个数字,可以使用:
[ 0 1 2 3 4 5 6 7 8 9 ]
然而,通过使用“-”符号可以简化操作:[ 0 - 9 ]
例:表示任意小写字母[ a - z ]
例:要匹配任意字母,则使用:[ A - Z a - z ]
例:[ ]在指定模式匹配的范围或限制方面很有用。
结合使用*与[ ]更是有益,例如[ A - Z a - Z ] *将匹
配所有单词。