码迷,mamicode.com
首页 > 其他好文 > 详细

grep命令、正则表达式、位置锚定、单词锚定

时间:2015-02-20 00:21:49      阅读:1006      评论:0      收藏:0      [点我收藏+]

标签:grep 正则表达式 位置锚定

grep:根据模式,搜索文本,将匹配的行显示出来

    语法:grep [OPTIONS] PATTERN [FILE...]

    PATTERN:将文本字符和正则表达式的元字符组合成的匹配条件

            如: grep ‘root‘ /etc/passwd,查找出文件中包含‘root‘字符的行。

    OPTIONS:

        --color:将匹配到的串用高亮颜色显示出来 

            如: grep --color ‘root‘ /etc/passwd 

            另:alias grep=‘grep --color‘,可定义为别名   

        -i, --ignore-case

            Ignore case distinctions in both the PATTERN and the input files.

            忽略模式匹配大小写

如:                

[root@station01 ~]# grep -i ‘Root‘ /etc/passwd

root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash

operator:*:11:0:operator:/root:/sbin/nologin

        -v:显示没有被模式匹配到的行 

        -o:只显示被模式匹配到的字符串,并且每个串显示为一行

       -E:扩展正则表达式

       -A NUM:显示匹配到行的后NUM行,即After

[root@station01 ~]# grep --color -A 3 ‘cpu MHz‘ /proc/cpuinfo   

cpu MHz         : 2128.040

cache size      : 4096 KB

fdiv_bug        : no

hlt_bug         : no

       -B NUM:显示匹配到行的前NUM行,即Before

[root@station01 ~]# grep --color -B 3 ‘cpu MHz‘ /proc/cpuinfo  

model           : 26

model name      : Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz

stepping        : 5

cpu MHz         : 2128.040

       -C NUM:显示匹配到行的前后NUM行,即Context

[root@station01 ~]# grep --color -C 3 ‘cpu MHz‘ /proc/cpuinfo  

model           : 26

model name      : Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz

stepping        : 5

cpu MHz         : 2128.040

cache size      : 4096 KB

fdiv_bug        : no

hlt_bug         : no


如:

[root@station01 ~]# grep -o ‘root‘ /etc/passwd           

root

root

root

root


通配字符:

    

globbing:

    *:任意长度的任意个字符

    ?:任意单个字符

    []:指定范围内的字符

    [^]:指定范围外的字符

正则表达式:Regular Expression ,REGEXP,由不表示字符本身意义的元字符组成


元字符:

    .:匹配任意单个字符

如:查找以r开头t结尾中间是任意两个字符的字符串

[root@station01 ~]# grep --color ‘r..t‘ /etc/passwd 

root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash

operator:*:11:0:operator:/root:/sbin/nologin

ftp:*:14:50:FTP User:/var/ftp:/sbin/nologin

    *:表示匹配其前面的字符任意次数,即0到无穷次

如:

    test2.txt文件中的内容如下:

a

b

ab

aab

aaab

acb

addb

amnb


结果:

[root@station01 ~]# grep --color "a*b" ./test2.txt 

b

ab

aab

aaab

acb

addb

amnb

    .*:表示任意长度的任意字符

如:

结果:

[root@station01 ~]# grep --color "a.*b" ./test2.txt 

ab

aab

aaab

acb

addb

amnb


默认情况下正则表达式工作在贪婪模式下,即尺可能多的匹配


    []:匹配指定范围内的任意单个字符

    [^]:匹配指定范围外的任意单个字符

 [:alnum:]所有字符, [:alpha:]所有字母, [:cntrl:], [:digit:]所有数字, [:graph:], [:lower:]小写字母, [:print:],

 [:punct:]符号, [:space:]空白字符, [:upper:]大写字母, [:xdigit:]

如:test2.txt文件

[root@station01 ~]# cat test2.txt 

a

b

ab

aab

aaab

acb

addb

amnb

ambbmnbaaafbaaabadffb

执行结果:

[root@station01 ~]# grep --color "a.*b" ./test2.txt 

ab

aab

aaab

acb

addb

amnb

ambbmnbaaafbaaabadffb

正常应该匹配到第一个amb即可

    \?:匹配其前字符0次或1次,注意模式中?号防需要转义,即\?

如:

结果:

[root@station01 ~]# grep --color "a\?b" ./test2.txt 

b

ab

aab

aaab

acb

addb

amnb

ambbmnbaaafbaaabadffb

整个串中有部分匹配

    \{m,n\}:匹配其前字符至少m次,至多n次

如:

    \{1,\}:至少1次

    \{,5\}:至多5次

查找a至少出现1次,至多3次,结尾是b的字符串

结果:

[root@station01 ~]# grep --color "a\{1,3\}b" ./test2.txt  

ab

aab

aaab

ambbmnbaaafbaaabadffb

查找a开头b结尾,中间出现至少1个最多3个的任意字符

[root@station01 ~]# grep --color "a.\{1,3\}b" ./test2.txt  

aab

aaab

acb

addb

amnb

ambbmnbaaafbaaabadffb


位置锚定

    ^:行首锚定,此字符后的任意字符出现在行首

查找/etc/passwd文件中以r开头,以t结尾,中间出现任意两个字符的字符串,且出现在行首

结果:

[root@station01 ~]# grep --color ‘^r..t‘ /etc/passwd

root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash

    $:行尾锚定,此字符前的内容必须出现在行尾

查找/etc/inittab中以w结束的行

结果:

[root@station01 ~]# grep --color ‘w$‘ /etc/inittab 

# For information on how to write upstart event handlers, or how

    ^$:空白行

查找/etc/inittab中的空白行

[root@station01 ~]# grep  ‘^$‘ /etc/inittab |wc -l

2

查找以数字结尾的行

[root@station01 ~]# grep --color ‘[[:digit:]]$‘ /etc/inittab 

#   5 - X11

    单词锚定

    \<:其后面的字符必须作为单词的首部出现,也可\b

    \>:其前的字符必须作为单词的尾部出现,也可\b

    \<root\<:root必须作为一行的单词出现,也可\broot\b


如文件test3.txt文件内容如下:

[root@station01 ~]# cat test3.txt 

root is administrator.

admin is a rooter.

adminrooter is wrong.

he is heroot

查找root出现在词首的行

结果:

[root@station01 ~]# grep --color ‘\<root‘ test3.txt 

root is administrator.

admin is a rooter.

查找root出现在词尾的行

结果:

[root@station01 ~]# grep --color ‘root\>‘ test3.txt   

root is administrator.

he is heroot

查找以一个单词出现的行

结果:

[root@station01 ~]# grep --color ‘\<root\>‘ test3.txt 

root is administrator.

[root@station01 ~]# grep --color ‘\broot\b‘ test3.txt 

root is administrator.


    分组

    \(\):将一串字符看成一个整体

查找以ab为一个整体出现的行

文件内容如下:

[root@station01 ~]# cat test2.txt 

a

b

ab

aab

aaab


acb


addb

amnb

ambbmnbaaafbaaabadffb

执行结果:

[root@station01 ~]# grep --color ‘\(ab\)*‘ test2.txt 

a

b

ab

aab

aaab


acb


addb

amnb

ambbmnbaaafbaaabadffb

    后向引用:前面出现的字符串,后面引用

    \1:引用第一个左括号和第一个右括号所包括的内容

    \2:同上,只不过是第二个

    \3:同上,只不过是第三个

测试文件内容如下:

[root@station01 ~]# cat test4.txt 

he like his lover

she love her liker

he like his liker

she love her lover

执行结果:

查找以l开头,e结尾,中间跟两个任意字符的行

[root@station01 ~]# grep --color ‘l..e‘ test4.txt 

he like his lover

she love her liker

he like his liker

she love her lover

查找以l..e开头并以l..e结尾中间跟任意个字符的行

[root@station01 ~]# grep --color ‘\(l..e\).*\1‘ test4.txt 

he like his liker

she love her lover

查找/etc/inittab中前面是任意数字,并以此数字结尾的行

[root@station01 ~]# grep --color ‘\([0-9]\).*\1$‘ /etc/inittab 

#   5 - X11












2015年2月16日于银川

GB-2312

本文出自 “无知有知” 博客,请务必保留此出处http://yujiqing.blog.51cto.com/1475974/1614822

grep命令、正则表达式、位置锚定、单词锚定

标签:grep 正则表达式 位置锚定

原文地址:http://yujiqing.blog.51cto.com/1475974/1614822

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!