Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96879
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-04 22:47
文章分类

全部博文(34)

文章存档

2017年(34)

我的朋友

分类: 服务器与存储

2017-04-08 12:13:25

基本正则表达式和扩展正则表达式

基本正则表达式元字符:
             字符匹配:
                  .:任意单个字符
                  []:指定范围内的任意单个字符
                         [0-9],[[:digit: ]]
                         [a-z], [[:lower:]]
                        [A-Z],[[:upper:]]
                        [[:alpha:]]
                        [[:alnum:]]
                        [[:space:]]
                        [[:punct:]]                        
                  [^]:指定范围外的任意单个字符
             次数匹配:用来指定匹配其前面的字符的次数
                  *:任意次
                      例子:x*y,xxy,xy,y,
                      .*:匹配任意长度的任意字符
                   \?:0次或1次
                        x\?y,xy,y,xxy

                       贪婪模式:尽可能长的去匹配字符:
                    \{m\}:匹配m次
                    \{m,n\}:m到n次
                    \{m,\}:至少m次;
                    \{0,n\}:至多n次;
                  位置锚定:用于指定字符出现的位置
                        ^:锚定行首
                                ^Char
                        $:锚定行尾
                                char$
                        ^$:空白行
                  \                     char\>:锚定词尾,char\b
                    分组:
                         \(\)
                               \(ab\)*xy
                    引用:
                         \1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
                         \2
                         ...
                             

                    grep 常用选项:
                         -v:反向,显示不能被模式所匹配到的行:
                         -o:仅显示被模式匹配到的子串,而非整行:
                         -i:不区分字符大小写,ignore-case
                         -E:支持扩展的正则表达式
                         -A #
                         -B #
                         -C #

egrep:使用扩展正则表达式来构建模式,相当于grep -E
        元字符:
                字符匹配:
                     .:任意单个字符
                     []:指定范围内的任意单个字符
                     [^]:指定范围外的任意但单个字符
                 次数匹配:
                      *: 匹配其前面的字符任意次
                      ?: 匹配其前面的字符0或1次
                      +:匹配其前面的字符至少1次
                      {m}:匹配其前面的字符m次
                      {m,n}: 至少m次,至多n次
                      {m,}: 至少m次
                      {0,n}: 至多n次

                 锚定:
                        ^: 行首
                        $:  行尾
                        \<, \b:词首
                        \>, \b:词尾

                   分组:
                          (): 分组

                          |: 或者, ac|bc
                                grep -E "con(C|c)at"
                                       conC或cat
                                             
                              




1、在/etc/rc.d/rc.sysinit文件中匹配以R来头中间是任意的两个单个字符以t结尾的行

[root@localhost ~]# grep 'B..t' /etc/rc.d/rc.sysinit
# Boot time profiles. Yes, this should be somewhere else.  

2、匹配在/etc/passwd文件里,以r开头中间跟上两个任意的字符,以t结尾的行

[root@localhost ~]# grep 'B..t' /etc/rc.d/rc.sysinit
# Boot time profiles. Yes, this should be somewhere else.
[root@localhost ~]# grep --color=auto 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

3、以大写R或者小写r开头,大写T或者小写t结尾,中间跟着两个任意字符的行
[root@localhost ~]# grep --color=auto '[Rr]..[Tt]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

4、以大写R或者小写r开头,大写T或者小写t结尾,中间跟着任意长度任意字符的行
[root@localhost ~]# grep --color=auto '[Rr].*[Tt]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin

5、以大写R或者小写r开头,大写T或者小写t结尾,中间跟着任意长度任意字符并且中间不能有标点符号的行

[root@localhost ~]# grep --color=auto '[Rr][^[:punct:]]*[Tt]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin

6、以大写R或者小写r开头并且位于行首,大写T或者小写t结尾,中间跟着任意长度任意字符并且中间不能有标点符号的行

[root@localhost ~]# grep --color=auto '^[Rr][^[:punct:]]*[Tt]' /etc/passwd
root:x:0:0:root:/root:/bin/bash

7、查看/etc/passwd下面以bash结尾的行


8、查找统计/etc/rc.d/rc.sysinit文件中的空白行的行数
[root@localhost ~]# grep '^$' /etc/rc.d/rc.sysinit |wc -l
96

9、编辑一个文本文件grep.txt
[root@localhost ~]# cat grep.txt
xy
xxy
xxxxxxxxxxxxxxxxxy
abxy
a6bxya7b
a6bxya6b
y

10、引用前面括号里出现的内容
[root@localhost ~]# grep --color=auto '\(a.b\)xy\1' grep.txt
a6bxya6b

11、编辑grep.txt文件,加入下面的内容
[root@localhost ~]# cat grep.txt
xy
xxy
xxxxxxxxxxxxxxxxxy
abxy
a6bxya7b
a6bxya6b
y
                    

                                      He like his lover.
                                      She love her liker.
                                      He love his lover.
                                      She like her liker.

12、查找以l开头中间跟两个字符以e结尾后面跟任意字符,再以l开头中间跟任意两个字符,再以er结尾的行


13、匹配前面是love后面就是lover,前面是like后面就是liker的行


14、显示被模式匹配的下一行,使用-A选项








阅读(1287) | 评论(0) | 转发(0) |
0

上一篇:sed 命令使用详解

下一篇:DNS详解

给主人留下些什么吧!~~