正则表达式

正则表达式: 
            由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符
            字面意义,而表示控制或通配的功能
程序支持:  grep,sed,awk,vim,less,nginx,varnish 等

元字符分类:字符匹配,匹配次数,位置锚定,分组
man 7 regex 获取帮助

. 匹配任意单个字符 (也可以ls a?   ls a?? ls *匹配任意一个单一字符)# echo adc |grep .

                                             # grep roo. /etc/passwd

正则表达式

[] 匹配指定范围内的任意单个字符      # echo ac bc fc |grep [ab]c

                                                   # echo 1 2 3 4 5 6 3 7 fc |grep [1-5]

                                                   # echo 1 4 5 6 7 v 1l a b n |grep [1-6][a-l]
                                                  正则表达式

[^] 匹配指定范围外的任意单个字符
[:alnum:] 或 [0-9a-zA-Z] # echo a d c b 1 2 3 | grep “[[:alnum:]]” # echo a d c b 1 2 3 ? | grep  [^[:alnum:]]
[:alpha:] 或 [a-zA-Z]
[:upper:] 或 [A-Z] 大写字母 # echo a d c b 1 2 3 E ? | grep  “[[:digit:][:upper:]]”
[:lower:] 或 [a-z]
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 或[0-9] # echo a d c b 1 2 3 | grep [[:digit:]]
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

匹配次数: 用在要指定次数的字符的字符后面,用于指定前面的字符要出现的次数
            先编写一个文件 cat > regex.txt 编写内容
            匹配前面的字符任意任意次,包含0次 # cat regex.txt|grep g[o]le
               贪婪模式:尽可能长的匹配
            .任意长度的任意字符               # cat regex.txt|grep g.le
            \?匹配其前面的字符0或1次           # cat regex.txt|grep “g[o]\?gle”
            +匹配其前面的字符至少1次          # cat regex.txt|grep “g[o]+gle”
            {n}匹配其前面的字符n次           # cat regex.txt|grep “g[o]{4}gle”
            {m,n}匹配其前面的字符至少m次 至多n次 # cat regex.txt|grep “g[o]{1,10}gle”
            {,n}匹配其前面的字符 至多n次     # cat regex.txt|grep “g[o]{,10}gle”
            {n,}匹配其前面的字符 至少n次    # cat regex.txt|grep “g[o]{1,}gle”
        
             # cat regex.txt|grep g[o]le     gole
             # cat regex.txt|grep g[o][o]le  goole

            ^行首锚定,用于模式的最左侧 # grep ^root /etc/passwd
            $行尾锚定,用于模式的最右侧 # grep /bin/bash$ /etc/passwd
            ^PATTERN$用于模式匹配整行
                ^$空行 #cat /etc/httpd/conf/httpd.conf |grep -ve “^$” -e “^#”
                       #cat /etc/httpd/conf/httpd.conf |grep -v “^$|^#”
                ^[[:space:]]*$空白行
            \<或\b 词首锚定,用于单词模式的左侧
            \>或\b 词尾锚定,用于单词模式的右侧
            \<PATTERN\>匹配整个单词
            # grep  “\<root\>” /etc/passwd
            # grep  “^root\>” /etc/passwd
            # grep  “^root\b” /etc/passwd

            # grep  “^root:\b” /etc/passwd

正则表达式

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

           # grep  “(\root)” /etc/passwd
            
       \1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
         如: (string1+string2)
)
              \1:string1+(string2)
              \2 :string2
           写一个脚本 test.txt
            #cat test.txt |grep “(r..t)”
            #cat test.txt |grep “(r..t).
\1″ 必须以root开头并以root结尾 
             root,dig,raat,root,rooo 前四个显示 必须以root开头并以root结尾 
             root,dig,raat,rooo,root全部显示  必须以root开头并以root结尾 

       或者| a|: a或b C|cat: C或cat

练习:
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
        #cat /proc/meminfo|grep “^[Ss]”
        #cat /proc/meminfo|grep -i “^s”
        #cat /proc/meminfo|grep -e ^s -e ^S
        #cat /proc/meminfo|grep “^s|^S”
        #cat /proc/meminfo|grep “^[s|S]”
正则表达式
2、显示/etc/passwd文件中不以/bin/bash结尾的行
        #grep -v “/bin/bash$” /etc/passwd

3、显示用户rpc默认的shell程序
        #grep “^rpc\>”   /etc/passwd  | cut -d : -f7 
        #grep -w “^rpc”   /etc/passwd  | cut -d : -f7 
正则表达式
4、找出/etc/passwd中的两位或三位数
        #cat /etc/passwd |grep -o “\<[0-9]{2,3}\>”

正则表达式

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

        #cat /etc/grub2.cfg  |grep “^[[:space:]]\+[^[:space:]]”

正则表达式

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多
个空白字符结尾的行

        #netstat -tan|grep “\<LISTEN\>[[:space:]]*$” 

正则表达式

7、显示CentOS7上所有系统用户的用户名和UID
        #cat /etc/passwd |cut -d: -f1,3 |grep “\<[[:digit:]]{1,3}\>”$
正则表达式
8、添加用户bash、testbash、basher、sh、nologin(其shell
为/sbin/nologin),找出/etc/passwd用户名同shell名的行
        #cat /etc/passwd | grep “(^.)\>.\/\1$”
正则表达式
9、仅利用df和grep和sort,取出磁盘各分区利用率,并从大到小排序
        #df |grep ^/dev/sd |grep -o “\b[[:digit:]]{1,3}\b%”|sort -rn

正则表达式
扩展的正则表达式
egrep 或grep -E 可以省略\ 
  除了\<    \> 
       \b    \b
  不可以省略

作业:
1、显示三个用户root、mage、wang的UID和默认shell
       #cat /etc/passwd|grep -E “^(root|wang|mage)\>”|cut -d : -f3,7
       #cat /etc/passwd|grep -E -w “^(root|wang|mage)”|cut -d : -f3,7
正则表达式
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
      # cat /etc/rc.d/init.d/functions | egrep “^[[:alpha:]_]+\>()” 
      # cat /etc/rc.d/init.d/functions | grep  -o “^.*[:graph:]

      # cat /etc/rc.d/init.d/functions | grep  -o “^.*\>\(\)”

正则表达式

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

   # echo /etc/rc.d/init.d/functions |egrep “[^/]+/?$”

正则表达式

4、使用egrep取出上面路径的目录名
 # echo “/etc/rc.d/init.d/functions” |egrep -o ‘.*/\b’

 # echo “/etc/rc.d/init.d/functions” |egrep -o ‘.*/\<‘

正则表达式

5、统计last命令中以root登录的每个主机IP地址登录次数

# last |grep “^root\>”|egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}” |sort|uniq -c

正则表达式

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
  #echo {0..300}|egrep -o “\<25[0-5]\>”
      [0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]
7、显示ifconfig命令结果中所有IPv4地址

ifconfig | egrep -o “\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>”

正则表达式
8、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
      # echo “welcome to magedu linux”|grep -o . |sort|uniq -c |sort -nr
正则表达式

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

(0)
MOMOMOMO
上一篇 2017-08-05 19:45
下一篇 2017-08-05 20:34

相关推荐

  • SED命令

    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转…

    Linux干货 2017-05-01
  • LINUX命令历史

    LINUX命令历史 LINUX的命令历史是什么? linux的命令历史的作用是,记录执行过的命令。如果你经常使用 Linux 命令行,那么使用 命令历史可以有效地提升你的效率。history(管理历史命令)语法:[root@localhost]#history(选项)(参数)选项:n:n为数字,要列出最近的 n 笔命令列表-c(清空所有历史命令)-d (删除…

    2017-09-14
  • N24_jerry 第十二周作业

    1、请描述一次完整的http请求处理过程; 简介 一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端,HTTP的响应内容同样有标准的格式。无论是什么客户端或者是什么服务端,大家只要按照HTTP的协议标准…

    Linux干货 2017-03-22
  • CentOS 7和CentOS 6 使用gpg工具实现公钥加密和解密

    运行环境: [root@Shining ~]# uname -a Linux Shining.ACG 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x…

    Linux干货 2016-12-01
  • ntp时间服务器

    前言   ntp(Network Time protocol)是网络时间协议,是用来使网络中的各个计算机时间同步的一种协议。 ntp配置  1)ntp是由ntp软件提供,如果没有可以使用yum进行安装  2)ntp配置文件介绍:/etc/ntp.conf   利用restrict来管理权限控制;语法格式:restric…

    Linux干货 2015-06-24
  • 文本处理三剑客之vim

    由于Linux中的配置文件都是以文本方式存在的,所以在Linux的系统中使用文本编辑器来配置系统是一件很重要的事情。而vim由于程序简单、编辑速度快且能够检查编程中的语法错误,所以已成为最常用也最重要的文本处理工具。下面我们就来介绍一下。 一、vim的模式 Vim在使用过程中,基本上分为三种模式:命令模式、编辑模式与扩展命令模式。在三种模式下,我们可以执行的…

    Linux干货 2016-08-12