注册 登录
编程论坛 Linux教室

正则表达式-简述

guixiaolan 发布于 2008-05-22 02:02, 3190 次点击
0.文件准备
[gxlinux@localhost ~]$ cat zhengze
1.ac
2.a\c
3.abc
4.abbc
5.abdc
6.12345
7.(last),(first)
8.(last)

1.$匹配结尾
[gxlinux@localhost ~]$ sed -n '/dc$/ p' zhengze
5.abdc
#匹配结尾是dc的行

2.^匹配开头
[gxlinux@localhost ~]$ sed -n '/^6/ p' zhengze
6.12345
#匹配开头是6的行

3.*匹配0个或多个
[gxlinux@localhost ~]$ sed -n '/ab*c/ p' zhengze
1.ac
3.abc
4.abbc
#匹配0个或多个b

4..匹配任意字符
[gxlinux@localhost ~]$ sed -n '/(.*)/ p' zhengze
7.(last),(first)
8.(last)
#匹配( 任意个字符 ),最长匹配

5.[^]匹配非
[gxlinux@localhost ~]$ sed -n '/([^)]*)/ p' zhengze
7.(last),(first)
8.(last)
#匹配( 非)的任意个字符 ),最短匹配,与上面的示例有所不同,注意

6.\匹配特殊字符
[gxlinux@localhost ~]$ sed -n '/a\\c/ p' zhengze #转义字符\\表示字符\
2.a\c
#匹配转义字符,即匹配a\c的行

7.示例
[gxlinux@localhost ~]$ sed -n 's/\([^,]*\),\(.*\)/\2,\1/ p' zhengze
(first),7.(last)
#将7.(last),(first)行前后置换
#\(与\)是一对,在替换作用中有用,不代表任何字符
#[^,]*表示不包括逗号的任意个字符,由于\(与\)将其括住,所以将其作为\1
#它匹配7.(last)
#.*表示与任意字符匹配,并将其作为\2
#它匹配(first)
#s表示替换,将前一个//中的内容替换为后一个//
#即将\([^,]*\),\(.*\)替换为\2,\1

8.?在find命令中表示1个任意字符
[gxlinux@localhost zhengze]$ ls
zhengce  zhengze  zhengzze
[gxlinux@localhost zhengze]$ find -name "zheng?e"
./zhengze
./zhengce
#注意:在sed或vi中并没有此功能

9.用处
正则表达式经常会用在sed和vi等一些编辑器中,作为查找或替代之用.

[[it] 本帖最后由 guixiaolan 于 2008-6-23 13:29 编辑 [/it]]
3 回复
#2
you_me2008-06-22 16:12
他这两个帖子是不是应该合并一下啊
#3
guixiaolan2008-06-22 16:43
这篇不怎么好!

[[it] 本帖最后由 guixiaolan 于 2008-6-23 13:30 编辑 [/it]]
#4
Ethip2008-06-22 22:01
支持一下
1