正则表达式

grep:Global search REgular expression and Print out the line

        文本搜索工具,根据用户指定的”模式“对目标文本逐行进行匹配检查;打印匹配到的行

       模式:由正则表达式字符及文本字符所编写的过滤条件

     grep命令选项:

        –color=auto:对匹配到的文本着色显示;

        -v:显示不能够被匹配到的行;

        -i:忽略字符的大小写

       -n:显示匹配到的行号

       -c:统计匹配的行数

      -o:仅显示匹配到的字符串

        -q:静默模式,不输出任何信息

        -A#:after,后#行

         -B:before,前#行

         -C:context,前后各#行

         -e:实现多个选项间的逻辑or关系

                      grep -e ’cat‘ -e ‘dog’file 

         -w:整行匹配整个单词

         -E:使用ERE

   元字符分类:字符匹配,匹配次数,位置锚定,分组

           字符匹配:

                . :匹配任意单个字符

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

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

                 [:diget:]数字    [:lower:]小写字母  [:upper:]大写字母  [:alpha:] 任意字母      [:alnum:] 数字和字母   [:space:]空格       [:punct:]标点符号

                匹配次数:

                   *:匹配前面的字符任意次  eg:a*b   匹配a任意次

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

                   \?:匹配其前面的字符0次或1次

                    \+:匹配其前面的字符至少1次

                    \{m\}:匹配其前面的字符m次

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

                     \{,n\}:匹配其前面的字符至多n次

                     \{m,\}:匹配其前面的字符至少M次

  位置锚定:

                     ^:行首锚定,用于模式的最左侧

                     $:行尾锚定,用于模式的最右侧

                      ^$:空行

                      ^[[:space:]]$空白行

                   \<或\b:词首锚定,用于单词的左侧

                    \>或\b:词尾锚定,用于单词的右侧

                    \<PATTERN\>:匹配整个单词 eg: \<root\>\ 或 \broot\b

    分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

实例:\(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

egrep 扩展的正则表达式

        扩展正则表达式的元字符:

          字符匹配:

             .任意单个字符

            []指定范围的字符

            [^]不在指定范围的字符

         次数匹配
             *:匹配前面的字符任意次   

             ?:0或1次

              +:1次以上

              {m}:匹配m次

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

         位置锚定:

               ^:行首锚定

               $:行尾锚定

                \<,\b:词首锚定

                \>,\b:词尾锚定

           分组:()   后向引用:\1,\2……    

                  或a|b     C|cat:c或cat

                     (C|c)at:Cat或cat



[root@localhost ~]# tail -n 0 -f /var/log/messages &      只显示新的监控内容   (后台执行)不影响新的操作

  剪切df下%前的数字

 1[root@localhost ~]# df |tr -s " " ":"|cut -d: -f5|tr -d "%"

Use

2

0

19

21

1

2、查出分区空间使用率的最大百分比值

     [root@localhost ~]# df |tr -s ' ' ':'|cut -d: -f5|sort -n -r

3查出/tmp的权限,以数字方式显示      正则表达式正则表达式正则表达式正则表达式

[root@localhost ~]# stat /tmp|head -4|tail -1|cut -d: -f2|tr -dc '[[:digit:]]'

4查出用户UID最大值的用户名、UID及shell类型

   [root@localhost ~]# cat /etc/passwd |cut -d: -f 1,3,7|sort -t: -k2 -nr正则表达式

练习:grep

1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)

        [root@localhost ~]# egrep '^(s|S)' /proc/meminfo

             [root@localhost ~]# grep ^[sS] /proc

            [root@localhost ~]# grep -i "^s" /proc/meminfo


2、显示/etc/passwd文件中不以/bin/bash结尾的行

           [root@localhost ~]# grep -v /bin/bash$ /etc/passwd

3、显示用户rpc默认的shell程序

            [root@localhost ~]# grep '^rpc\b' /etc/passwd |cut -d: -f7

                 

4、找出/etc/passwd中的两位或三位数

[root@localhost ~]# grep "\b[0-9]\{2,3\}\b" /etc/passwd

[root@localhost ~]# grep "\b[1-9][0-9]\{1,2\}\b" /etc/passwd

5、显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

[root@localhost ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

6、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行  

[root@localhost ~]# netstat -tan |grep "LISTEN[[:space:]]$\?"

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

       [root@localhost ~]# grep '^\b\(.*\)\b.*/\1$' /etc/passwd

          [root@localhost ~]# grep '^\<\(.*\)\>.*\b\1\b$' /etc/passwd

           [root@localhost ~]# grep '^\(.*\).*/\1$' /etc/passwd

      

练习egrep

1、显示当前系统root、mage或wang用户的UID和默认shell

              root@localhost ~]# egrep "^\<root\>|^\<mage\>|^\<wang\>" /etc/passwd | cut -d: -f3,7

[root@localhost ~]# egrep "^(root|mage|wang)\b" /etc/passwd |cut -d: -f3,7

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

[root@localhost ~]# grep -E "^[[:alnum:]_]+\(\)" /etc/rc.d/init.d/functions 

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

init.d/function" |egrep -o "[^/]+/?$"

原创文章,作者:蛰伏,如若转载,请注明出处:http://www.178linux.com/30303

(0)
蛰伏蛰伏
上一篇 2016-08-08 16:11
下一篇 2016-08-08 16:11

相关推荐

  • LVM2

    1、逻辑卷     逻辑卷为何物:逻辑,是从人的角度出发的,合乎人类的思维的,所以逻辑卷相对于其它磁盘分区高级一些。主要作用就是可以进行动态扩展缩减,不像其它分区大小固定了要想变动就必须重新格式化。 在实际工作环境中,LVM更适用于现实复杂多变的环境。 现在使用的是LVM2,Logical Volume Manager,Version 2…

    Linux干货 2016-08-30
  • bash脚本进阶(续)

     1、打印99乘法表 [root@ _212_ ~/bin/for_script]# cat 99_changfa.sh  #!/bin/bash line=1 for i in `seq 1 9`;     …

    Linux干货 2016-08-21
  • bash通配符和正则表达式元字符部分归纳

    Linux中有各种各样的字符,而且在不同环境和不同命令之下含义也不同 作为新手,决定先归纳学到的符号,方便后面学习厘清它们之间的关系。 glob 简化了的正则表达式 bash默认通配符: ? :只匹配一个任意字符; * :匹配零个或多个任意字符;   [^] :方括号及其中^中的取反 [abc]:匹配任何一个列在方括号中的字符(这个例子要么匹配一个…

    Linux干货 2016-04-11
  • 2016-08-12博客作业

    德摩根定理       在命题逻辑和逻辑代数中,德摩根定律(或称德摩根定理)是关于命题逻辑规律的一对法则。奥古斯塔斯·德摩根首先发现了在命题逻辑中存在着下面这些关系: 非(P 且 Q)=(非 P)或(非 Q) 非(P 或 Q)=(非 P)且(非 Q)     …

    Linux干货 2016-08-15
  • Raid的工作原理

    1,什么是Raid Raid的基本原理就是把多个磁盘组合到一起,组成一个磁盘组,使性能达到或超过一个容量巨大价格昂工艺的磁盘,当然基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面。 2.RAID级别介绍;一般常用的RAID阶层,分别是RAID 0、RAID1、…

    Linux干货 2017-06-19
  • 8.1作业

    8月1日作业 创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser [root@localhost ~]# useradd -u 1234 -g bin -G root,ftp&…

    Linux干货 2016-08-04