正则表达式是一种符号表示法,被用来识别文本模式。在某种程度上,它们与匹配文件和路径名的shell通配符比较相似,但其规模更庞大。
一、grep程序
-i | 忽略大小写 |
-v | 不匹配 |
-c | 打印匹配数量而不是文本本身 |
-l | 打印包含匹配项的文件名 |
-L | 相似-l,但只打印不包含匹配项的文件名 |
-n | 在每个匹配行之前打印出其位于文件中的相应行号 |
-h | 对应于多文件搜索,不输出文件名 |
二、正则表达式的元字符
^ $ . [] {} - ? * + () | \
(1) .圆点字符,用来匹配任意字符
如果我们在正则表达式中包含它,它将会匹配在此位置的任意一个字符。
[email protected]:~$ grep -h ‘.zip‘ dirlist*.txt 会输出类似binzip2 bzip2 gzip
(2)^插入符号和$美元符号会被看做是锚(定位点)
这意味着正则表达式只有在文本行的开头或末尾被找到时,才算发生一次匹配。
[email protected]:~$ grep -h ‘^zip‘ dirlist*.txt 会输出类似zip zipcloak zipgrep zipinfo,就是说前边被占有,不能匹配
[email protected]:~$ grep -h ‘zip$‘ dirlist*.txt 会输出类似bzip binzip lockzip,就是说后边已被占有,不能匹配上字符
(3)中括号表达式和字符类
通过使用中括号[],我们能够从一个指定的字符集合中匹配一个单个的字符
[email protected]:~$ grep -h ‘[bg]zip‘ dirlist*.txt 会输出bzip bzip2recover gzip2
如果在正则表示式中的第一个字符(否则不生效)是一个插入字符,则剩余的字符被看作是不会在给定的字符位置出现的字符集合。
[email protected]:~$ grep -h ‘[^bg]zip‘ dirlist*.txt 会输出bunzip2 funzip
(4)传统的字符区域,用-简写
如,在我们的列表中找到每个以大写字母开头的文件,以下边这种方式写比较麻烦
[email protected]:~$ grep -h ‘^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]‘ dirlist*.txt
我们可以用一个三字符区域来缩写26个字母,如下
[email protected]:~$ grep -h ‘^[A-Z]‘ dirlist*.txt
另外,比较以下两种写法:
[email protected]:~$ grep -h ‘[A-Z]‘ dirlist*.txt 输出包含一个大写字母的文件名
[email protected]:~$ grep -h ‘[-AZ]‘ dirlist*.txt 输出表达式中包含一个连字符或者大写字母A或者大写字母Z的文件名
三、POSIX字符集
UNIX刚开发时,使用ASCII字符,ASCII字符中,前32个字符(数字0-31)是控制码(例如tabs,backspaces,和回车),再有32个字符(32-63)包含打印字符,包含大多数的标点符号和数字0到9;再随后的32个字符(64-95)包含大写字符和一些更多的标点符号。最后的31个字符(96-127)包含小写字母和更过的标点符号。
系统使用这种排序规则的ASCII: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
时间: 2024-11-11 04:29:35