• Linux--shell grep与正则表达式--04


    一、grep程序

    Linux下有文本处理三剑客:grep、sed、awk

    grep:文本 行过滤工具

    sed:文本 行编辑器(流编辑器)

    awk:报告生成器(做文本输出格式化)

    1、grep

      grep包含三个命令:grep、egrep、fgrep,他们是用来进行 行模式(patten)匹配的

        egrep == grep -E

        fgrep == fast grep

        grep默认使用正则表达式进行文本匹配

    2、grep的用法

      grep [option]… PATTEN [filename]

    3、grep的常见选项

      -E 支持使用扩展的正则表达式(regexp)

      -P 使用perl语言的正则表达式引擎进行搜索(每一种语言的正则表达式引擎都不相同,甚至sed grep awk 使用的regexp引擎也不相同)

      -i 忽略大小写

      -v 进行反选

      -o 仅仅输出匹配的内容(默认输出匹配到的行

      --color=auto 语法着色

      -n 显示行号

      -w 匹配固定的单词

    4、PATTEN—正则表达式

      作用:通过一些特殊字符,来表示一类字符内容,交给前面的命令来执行;如果使用特殊字符本身含义就需要使用 进行转义

      a) 文件通配符: *   ?    [ ]    [^ ]

      b) 字符匹配:

        .  任意一个字符

        [ ]  范围内的任意一个字符

        [^ ] 范围外的任意一个字符

        字符类:

          [:alnum:] 字母+数字

          [:alpha:] 字母

          [:upper:] 大写字母

          [:lower:] 小写字母

          [:digit:] 数字

          [:punct:] 表示特殊字符

          [:space:] 空格    ^[[:space:]]*$ 有空格键的空行

      c) 次数匹配

        *  匹配前一个字符0次到多次 .*表示任意长度的任意字符

        ?  匹配前一个字符0次到1次

        +  匹配前一个字符1次到n次

        {m} 匹配前一个字符m次   a{7} == aaaaaaa

        {m,n} 匹配前一个字符m到n次

        {0,n} 匹配前一个字符0到n次

        {m,} 匹配前一个字符至少m次

      d) 位置锚定

        ^  锚定行首

        $  锚定行尾

          锚定词首和锚定词尾

        >  锚定词尾

        <  锚定词首

      e) 分组   分组的特性:默认情况下,Linux系统会为分组指定变量,变量的表示形式为1 2 3 …

        ()     实例: (abc) 把abc看成一个整体匹配

    练习:

    1、显示/proc/meminfo文件中大小s开头的行

    grep -i "^s" /proc/meminfo

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

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

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

    sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1

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

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

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

    grep "[0-9]{2,3}" /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 "LISTEN[[:space:]]*$"

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

    useradd bash /bin/bash
    useradd testbash
    useradd basher
    useradd -s /sbin/nologin nologin
    grep "(^[[:alnum:]]+>).*1$" /etc/passwd
  • 相关阅读:
    最佳调度问题_分支限界法
    运动员最佳配对问题
    最小重量机器设计问题
    实现银行家算法和先进先出算法_对文件读写数据
    n皇后问题_回溯法
    0-1背包_回溯法
    根据前序、中序、后序遍历还原二叉树
    矩阵连乘问题_动态规划
    最长公共子序列_动态规划
    最优二叉查找树_动态规划
  • 原文地址:https://www.cnblogs.com/gxnihao/p/11351826.html
Copyright © 2020-2023  润新知