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

正则表达式在GREP使用的方法和技巧

时间:2014-07-13 14:53:30      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:用户   技巧   表达式   

正则表达式在GREP使用的方法和技巧

 

1、  正则表达式的基本概念

Grep 是查找的一个基本命令  文本处理工具: 根据用户指定的文本模式,对目标文件进行逐行搜索,并显示匹配。

正则表达式是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。

 

2、正则表达式分类:

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


基本正则表达式

        grep [OPTIONS] PATTERN [FILE...


元字符: 

字符匹配:

                .:匹配任意字符

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

               []:匹配范围内的字符

                            [0-9],------表示09中的任意一个字符

        字符集合:

                [:space:]表示任意空白字符

                [:punct:] 所有的标点符号

                [:lower:]所有小写字母

                [:upper:]所有大写

                [:digit:]所有数字

                [:alnum:]所有数字和字母

                [:alpha:]所有字母

次数匹配:用于指定其面前的字符所能够出现的次数

                *:任意长度,它面前的字符可以出现任意次;例如:x*y

               \?:0次或1次,它前面的字符是可有可无的;例如:x\?y                             

            \{m\}:m次,它前面的字符可以出现m次;

         \{mn\}:至少m次,至多n

           \{m,\}:至少m             

 \{0,n\}:至多n

位置锚定符号:

                ^:行首设定,

                $:行尾设定,

               ^$:空白行

               \<:词首

               \>:词尾

                                         

分组字符:

    \(\):分组字符---分组默认编号为自左而后编号

              \#:引用第n个括号所匹配到的内容,而非模式本身;

         如:(abc)(123)*   \1\2 ----这里的引用\1引用为(abc)的内容;\2引用为(123)的内容      

                           

例如

1、在一个qq库中提出8-11位的QQ号码有那些?

          grep  "\<[0-9]\{8,11\}\> "  qq

2、例如:提取a.txt中出现一位单位数的行

        grep  "\<[0-9]\{1,\}\>"  /home/a.txt

 

3、显示/etc/passwd文件中默认shell/bin/bash的用户 

bubuko.com,布布扣

 

 

4、显示/boot/grub/grub.conf中以至少一个空白字符的行

bubuko.com,布布扣

         

5、添加用户bashsynchalt,而找出当前系统上其用户名和默认shell相同的用户

    grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd

 bubuko.com,布布扣

 

6、在/etc/inittab中显示以#号开头后跟至少2个空白字符的行

   bubuko.com,布布扣

 

 

 

扩展正则表达式:

               grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]             

字符匹配:         

                  .:任意字符

                 []

                [^]:内容取反如:非空白字符开头的行—[^[:space:]]          

次数匹配:

                  *:任意次

                 ?:01

                  +:至少一次

              m}:精确匹配每次

             {m,n}:至少m次,最多n

               {m,}:至少出现m

              {0,n}:最多出现n

位置锚定:设置要搜索的位置

                  ^:行首锚定

                  $:行尾锚定 ---^$表示空白行

                 \<:词首锚定

                 \>:词尾锚定                              

分组设定:

              ():括起来的内容以组的形式,依次匹配

                \#:引用: \1 ,\2,\3

                       (abc)(123)*   \1\2 ----这里的引用\1引用为(abc)的内容;\2引用为(123)的内容                     |:或者

                     a|ba或者b

 

7、显示当前系统上rootbashuser1 用户的默认shell

         grep–E "^(root|bash|user1):" /etc/passwd

bubuko.com,布布扣

 

8、找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;

        grep -o -E "\<[[:alpha:]]+\>\(\).*" /etc/rc.d/init.d/functions

bubuko.com,布布扣

9、使用echo命令输出一个路径,而后使用grep取出其基名;

        echo "/etc/passwd" | grep -o -E "[[:alnum:]]+/?"

bubuko.com,布布扣

10、找出ifconfig命令结果中的1-255之间的数字

           ifconfig | grep -o -E"\<[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]\>"

11、写一个模式,能匹配合理的IPV4地址;

bubuko.com,布布扣

 

 


本文出自 “奋斗的人” 博客,请务必保留此出处http://wodemeng.blog.51cto.com/1384120/1437521

正则表达式在GREP使用的方法和技巧,布布扣,bubuko.com

正则表达式在GREP使用的方法和技巧

标签:用户   技巧   表达式   

原文地址:http://wodemeng.blog.51cto.com/1384120/1437521

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