码迷,mamicode.com
首页 > 系统相关 > 详细

linux grep学习整理

时间:2015-08-30 08:49:30      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:linux   用户   

第一部分:补充

       umask  遮罩码  

                  目录权限为777-umask     

                  用户为 666-umask       如果某一类用户的权限有执行权限,会自动加1

        管理员的遮罩码为0022     普通用户的为0002

第二部分:文本处理工具  

    1、定义:

     Linux文件三个本地处理工具

           A:grep 文本过滤工具 ,搜索工具

           B:sed文件编辑工具

           C:awk文本报告生成器

     Grep :Global research regular expression and printing简写

        根据用户指定的模式(pattern)进行去搜索目标文本模式:由正则表达式的元字符有文本字符所填写的过滤条件

        组成:由元字符 regexp(特殊字符):字符不表示字面意义,表示通配功能

         正则表达式类型

                     基本正则bre,Grep支持基本正则表达式(默认情况下)

                     扩展正则ere:可利用egrep

   2、 语法结构:

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

                 选项说明:

                     -v显示没有匹配的项目,对结果取反

                     -i 不区分大小写

                     -o 仅显示匹配到的串,其它不显示

                    -E支持扩展正则表达式

                    

                    

           PATTERN 称为模式

                   模式中如果是字符采用单引号’ ‘

                               如果是变量采用双引号” ”,要做替换

   3、通配符glob

                   *   任意长度的任意字符

                   ?  任意单个字符

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

    4、基本正则表达达式元字符 

             第一类:字符匹配

                  .  匹配任意单个字符

                  [   ] 指定范围内的任意单个字符   例如:[abc],指定a, b,c,[aA]说明A,a

                  [^]表示取反的 例如[^ab] 不包括a,b的之外其它字符

                         字符集形式[: :]

                               技术分享

                                使用通过[^[:upper:]]形式,外面再加一个方括号[],

 

                  * 匹配其前面的字符任意次   例如ab*c    表明匹配字符b任意次包括0次

                  .* 任意长度任意字符  ,贪婪模式

             第二类:次数匹配

                  x\{m,n\} 指定字符x,至少出现M次,至多N次

                  x\{m,\}  指定字符x,至少出现M次,多者不限

                  x\{0,n\}  至多出现N次

                  x\{m\}精确M次

                  ?  表示匹配其前面的字符0次或1次,前面字符可用可无

             第三类:锚定符 :出现在某个位置

                  行锚定:

                  ^ 行首匹配   锚定行首

                  $ 行尾匹配   锚定行尾

                  ^$ 锚定空白行

                  单词锚定:指连续字符

                     \<   锚定词首,后面为单词,例如\< root  说明是以root为词首的   \broot

                     \> 锚定词尾     例如 root\>  root\b

                       锚定词词首或词尾可用 \b

                      \<roor\>  表示精确匹配root

               第四类:针对字符分组,后面可引用

                     \(\ )  例如\(aabb\)  aabb为可引用字符,分组完成后后面可引用

                                 \1表示引用第一组匹配字符  \2表示引用第二次匹配字符

                               例如:grep “\(l..e\).* \1r”test.txt  说明: \1表示引用第一组字符”l..e”

                                            例如love后面引用为lover

                     \具有转意的字符,能够把特殊字符变为普通字符,例如\*,输出为字符*

 

5:扩展正值表达式

            其它与基本正则表达式相同

             \(\)换为—>( ) 可以用做分组

            \{ }换为—>{ }

             +:次数匹配,匹配其前字符至少一次

              | 表示或者  a|b 表示a或者b   (C|c)at 表示二个分组  不加括号表示为C、cat

          

 

练习:

3、显示/etc/passwd文件中以bash结尾的行

        grep ‘bash\>‘ /etc/passwd  输出为

      技术分享

4、显示/etc/passwd文件中的两位数或三位数

      grep -E ‘\<([0-9]{2}|[0-9]{3})\>‘ /etc/passwd      备注:[0-9]{2}表示[0-9]重复二次,即二位数,这里注意优

先级的问题()的优先级高于\<    { 2 }这种的写法采用扩展正值表达式
     技术分享 

5、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行

      netstat -tan|grep ‘LISTEN[[:space:]]\{,\}‘  输出为

      技术分享

6、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行

grep ‘\(\<bash\).*\1‘ /etc/passwd 

cut -d: -f1,7 /etc/passwd

       grep "\(\<bash\):.*\1" /etc/passwd  或者

       grep "\(\<bash\):.*\1$" /etc/passwd

     技术分享

 

    egrep ‘(^[[:alpha:]]+\>).*\1$‘ /etc/passwd
     技术分享

7、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)

      grep -E ‘^(root|user1|centos).*‘ /etc/passwd|cut -d: -f3,7

     技术分享

8、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行

grep -n ‘[[:alpha:]]_*.*()‘ /etc/rc.d/init.d/functions  其中 _*表示匹配次数包括0次

    技术分享

9、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名

       目录名   pwd|egrep -o ‘/.*[[:punct:]]‘

    技术分享

             echo ‘/tmp/51cto/dirname‘|egrep -o ‘/.*[[:punct:]]‘

   技术分享

          基名:

    [root@centos71 dirname]# echo ‘/tmp/51cto/dirname‘|egrep -o ‘[[:alpha:]]+$‘

      主要考虑基名都是以字母结尾

   技术分享

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

ifconfig|grep -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\>"

   技术分享
  或者   {2}表示[0-5]或者[0-9]重复2次

[root@centos71 /]# ifconfig|grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\>"

linux grep学习整理

标签:linux   用户   

原文地址:http://wangsongbin.blog.51cto.com/1130001/1689680

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