正则表达式及grep使用

正则表达式分为:“基本正则表达式 BRE”跟“扩展正则表达式 ERE”

基本正则表达式:

    (1)字符匹配    

          "."任意单个字符

           "[]"匹配指定范围内的单个字符

          "[^]"匹配字符以外的单个字符

    (2)次数匹配

          "*"匹配前面字符的任意次 (.*:组合就相当于glob中的"*"匹配任意字符任意次)

          "\?"匹配前面的字符0次或1次;"\+"匹配前面的字符至少1次

          "\{m\}"匹配前面的字符"m"次;"\{m,n\}"匹配前面的字符至少"m"次至多"n"次

    (3)位置锚定

          "^"行首;"$"行尾;("^$":真空行,什么都没有。 "^[[:space:]]*$"有空白字符的空行。)

          "\<"或"\b"词首;"\>"或"\b"词尾;

    (4)分组

         "\(\)"将一个或多个字符捆绑在一起,当一个整体处理;

         "\1"后项引用,引用从左向右数第一个分组所匹配到的字符;以此类推"\2"就是第2个分组所匹配到的字符,"\3"就是第三个….

    blob.png(图很丑看明白就好,哈哈..)

        注意:后项引用是直接使用前一个分组已经匹配出来的字符结果,而次数匹配的是相当于在做1次或多次匹配

扩展正则表达式:

    (1)字符匹配    

          "."任意单个字符

           "[]"匹配指定范围内的单个字符

          "[^]"匹配字符以外的单个字符

    (2)次数匹配

          "*"匹配前面字符的任意次 (.*:组合就相当于glob中的"*"匹配任意字符任意次)

          "?"匹配前面的字符0次或1次;"+"匹配前面的字符至少1次

          "{m}"匹配前面的字符"m"次;"{m,n}"匹配前面的字符至少"m"次至多"n"次

    (3)位置锚定

          "^"行首;"$"行尾;("^$":真空行,什么都没有。 "^[[:space:]]*$"有空白字符的空行。)

          "\<"或"\b"词首;"\>"或"\b"词尾;

    (4)分组

         "()"将一个或多个字符捆绑在一起,当一个整体处理;

         "\1"后项引用,引用从左向右数第一个分组所匹配到的字符;以此类推"\2"就是第2个分组所匹配到的字符,"\3"就是第三个….

    (5)或者   "|" a|b:a或者b

           A|asd:A或者asd

            (cai)|(CA)I:cai或者CA


        大部分跟正则表达式相同,有些只是去掉"\"反斜线逃。

        正则表达式默认工作在贪婪模式下。

grep:是一个可以使用正则表达式搜索匹配的文本过滤工具,使用正则表达式可以做到匹配出很多“glob”匹配不出的内容。

       
            grep [OPTIONS] PATTERN [FILE...]
            grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
                        选项:
                                                        --color=auto: 对匹配到的文本着色显示;
                                                        -v: 显示不能够被pattern匹配到的行;
                                                        -i: 忽略字符大小写;
                                                        -o: 仅显示匹配到的字符串;
                                                        -q: 静默模式,不输出任何信息;
                                                        -A #:after, 后#行
                                                        -B #: before, 前#行
                                                        -C #:context, 前后各#行
                                                        -E:使用ERE;

grep使用演示:

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

# grep -i "^s" /proc/meminfo 
# grep "^[Ss]" /proc/meminfo
# grep "^S" /proc/meminfo && grep "^s" /proc/meminfo (感谢“N21-蓝”妹子的细心实验检查,这个答案是有问题的,各位可以看下有什么问题检验一下自己。)

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

# grep -v "/bin/bash$" /etc/passwd

3、显示/etc/passwd文件中ID号最大的用户的用户名;

# sort -t: -k3 -n /etc/passwd | tail -1 | grep -o "^[[:alnum:]]\+\b"
# sort -t: -k3 -n /etc/passwd | tail -1 | grep -o -E "^[[:alnum:]]+\b"

4、如果用户root存在,显示其默认的shell程序;

# id root &> /dev/null && grep "^root" /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的两位或三位数;

# grep "\b[0-9]\{2,3\}\b" /etc/passwd
# grep -E "\b[0-9]{2,3}\b" /etc/passwd

6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;

# grep "^[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.sysinit

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

# netstat -tan | grep --color "LISTEN[[:space:]]*"

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

这题我使用bash脚本
#!/bin/bash
id bash &> /dev/mull || useradd bash
id testbash &> /dev/null || useradd testbash
id basher &> /dev/null || useradd basher
id nologin &> /dev/null || useradd -s /sbin/nologin nologin
grep --color "^\(\b[[:alnum:]]\+\b\).*\1$" /etc/passwd
#grep --color -E "^(\b[[:alnum:]]+\b).*\1$" /etc/passwd

1、显示当前系统root、centos或user1用户的默认shell和UID;

# grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f1,3,7

2、找出/etc/rc.d/init.d/functions文件(centos6)中某单词后面跟一个小括号的行;

# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

3、使用echo输出一绝对路径,使用egrep取出其基名;

# echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1

4、找出ifconfig命令结果中1-255之间的数值;

# ifconfig | grep -E --color "\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-4]?"

5、找出ifconfig命令结果中的IP地址;

# ifconfig | grep -E --color "((\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-5]?)\b\.){3}(\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-5]?\b)"

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

(0)
N21_志建N21_志建
上一篇 2016-07-10
下一篇 2016-07-10

相关推荐

  • N28-第四周:正则表达式练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。
    2、编辑/etc/group文件,添加组hadoop。
    3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。
    4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。
    5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。
    6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;
    7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
    8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
    9、找出/etc/passwd文件中的一位数或两位数;
    10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
    11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
    12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
    13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

    2017-12-24
  • Linux上命令使用格式及如何获取帮助信息

    Linux系统上命令使用: 命令本身是一个可执行的程序文件,二进制格式的文件,有可能会调用共享库文件,发起一条命令,请求内核将某一个二进制程序运行为一个进程。   命令的语法格式:   ~]#COMMAND(命令)   OPENTIONS(选项)   ARGUMENTS(参数) command 命令…

    Linux干货 2016-10-30
  • http配置文件中文文档

    Apache中Httpd.conf详解 Apache 的 httpd.conf 详解 # # Apache服务器主配置文件. 包括服务器指令的目录设置. # 详见 <URL:http://www.apache.org/docs/>  # # 请在理解用途的基础上阅读各指令。 # # 再读取此文档后,服务器将继续搜索运行 # E:/Pro…

    Linux干货 2017-08-08
  • 学会在命令行中获取帮助

    在命令行中获取帮助是学习Linux必须get的一项技能,学会之后受益多多。  Linux中的命令有内部命令和外部命令之分,通常使用 type 命令来区分 除此之外还可以使用 enable 命令来查看内部命令 enable命令后的许多option可以对这些内部命令了解更多,比如: 想要知道内部命令有多少个 enable -a |wc -l 禁用某个内…

    2017-07-15
  • shell脚本编程初步–吐血整理

    shell脚本编程 编程基础 程序: 程序的构成:指令 + 数据 程序的编程风格:     过程式:以指令为中心,数据服务于指令     对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 shell,perl,python语言均为高级编程语言 编程的逻辑处理方式: &n…

    Linux干货 2016-08-18
  • 包管理及源码安装Apache

    一,概述 yum 仓库的安装 在/etc/yum.repos.d/目录下创建后缀名为repo的配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 配置文件基本包含的四个要求 安装及升级本地程序包: * localinstall rpmfile1 [rpmfile2] […] (用install替代) …

    Linux干货 2016-09-01

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-12 14:44

    写的很好,排版还可以在漂亮一点,加油