10-正则表达式-grep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10-正则表达式-grep相关的知识,希望对你有一定的参考价值。

10-正则表达式-grep

作业一:正则表达式

在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的

  1. 正则表达式分类

    • 基本正则表达式
    • 扩展的正则表达式
    • Perl正则表达式
  2. 基本组成部分 技术分享

grep命令

  1. 选项

    -a 不要忽略二进制数据。  
    -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。  
    -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。  
    -c 计算符合范本样式的列数。   
    -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。  
    -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。   
    -e<范本样式> 指定字符串作为查找文件内容的范本样式。   
    -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。   
    -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。  
    -F 将范本样式视为固定字符串的列表。   
    -G 将范本样式视为普通的表示法来使用。  
    -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。  
    -H 在显示符合范本样式的那一列之前,标示该列的文件名称。  
    -i 忽略字符大小写的差别。  
    -l 列出文件内容符合指定的范本样式的文件名称。  
    -L 列出文件内容不符合指定的范本样式的文件名称。  
    -n 在显示符合范本样式的那一列之前,标示出该列的编号。  
    -q 不显示任何信息。  
    -R/-r 此参数的效果和指定“-d recurse”参数相同。  
    -s 不显示错误信息。  
    -v 反转查找。  
    -w 只显示全字符合的列。   
    -x 只显示全列符合的列。   
    -y 此参数效果跟“-i”相同。   
    -o 只输出文件中匹配到的部分。
    
  2. grep命令常见用法
    文件中查找一个单词:

    grep match_pattern file_name   
    grep "match_pattern" file_name
    

    多个文件中查找:

    grep "match_pattern" file_1 file_2 file_3 ...
    

    输出除之外的所有行 -v 选项:

    grep -v "match_pattern" file_name
    

    使用正则表达式 -E 选项:

    grep -E "[1-9]+"   
     egrep "[1-9]+"
    

    只输出文件中匹配到的部分 -o 选项:

    echo this is a test line. | grep -o -E "[a-z]+\." 
    line. 
    echo this is a test line. | egrep -o "[a-z]+\." 
    line.  
    

    统计文件或者文本中包含匹配字符串的行数 -c 选项:

    grep -c "text" file_name
    

    在多级目录中对文本进行递归搜索:

    grep "text" . -r -n
    

    选项 -e 制动多个匹配样式:

    echo this is a text line | grep -e "is" -e "line" -o 
    is
    line
    

作业二:grep作业

  1. 显示出所有含有root的行:

    cat /etc/passwd | grep root
    root:x:0:0:root:/root:/bin/bash
    
  2. 输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:

    [[email protected] ~]# grep -C ‘2‘ bash /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    --
    chrony:x:996:994::/var/lib/chrony:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    ads247admin:x:1000:1000::/home/ads247admin:/bin/bash
    cx2c:x:1001:1001::/home/cx2c:/bin/bash
    
  3. 显示出有多少行含有nologin。

    [[email protected] ~]# grep -c ‘nologin‘ /etc/passwd
    22
    
  4. 显示出那些行含有root,并将行号一块输出。

    [[email protected] ~]# grep -n ‘root‘ /etc/passwd
    1:root:x:0:0:root:/root:/bin/bash
    10:operator:x:11:0:operator:/root:/sbin/nologin
    
  5. 显示出文件中

  6. 新建用户 abominable
    abominate
    anomie
    atomize
    编写正则表达式,将他们匹配出来

    [[email protected] ~]# adduser abominable
    [[email protected] ~]# adduser abominate
    [[email protected] ~]# adduser anomie
    [[email protected] ~]# adduser atomize
    [[email protected] ~]# egrep ‘^a[a-z]omi[a-z]*‘ /etc/passwd
    abominable:x:1002:1002::/home/abominable:/bin/bash
    abominate:x:1003:1003::/home/abominate:/bin/bash
    anomie:x:1004:1004::/home/anomie:/bin/bash
    atomize:x:1005:1005::/home/atomize:/bin/bash
    
  7. 建四个用户 Alex213sb
    Wpq2222b
    yH438PIG
    egon666 egon 过滤出用户名组成是字母+数字+字母的行

    [[email protected] ~]# adduser Alex213sb
    [[email protected] ~]# adduser Wpq2222b
    [[email protected] ~]# adduser yH438PIG
    [[email protected] ~]# adduser egon666egon
    [[email protected] ~]# egrep ‘([a-Z]+)([0-9]+)([a-Z]+)‘ /etc/passwd
    ads247admin:x:1000:1000::/home/ads247admin:/bin/bash
    cx2c:x:1001:1001::/home/cx2c:/bin/bash
    Alex213sb:x:1006:1006::/home/Alex213sb:/bin/bash
    Wpq2222b:x:1007:1007::/home/Wpq2222b:/bin/bash
    yH438PIG:x:1008:1008::/home/yH438PIG:/bin/bash
    egon666egon:x:1009:1009::/home/egon666egon:/bin/bash
    
  8. 显示出/etc目录下所有包含root的文件名
    grep -rl

    [[email protected] ~]# grep -rln "root" /etc/
    /etc/pki/ca-trust/ca-legacy.conf
    /etc/pki/ca-trust/extracted/README
    /etc/pki/ca-trust/extracted/java/README
    /etc/pki/ca-trust/extracted/java/cacerts
    /etc/pki/ca-trust/extracted/openssl/README
    /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
    /etc/pki/ca-trust/extracted/pem/README
    /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
    /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
    /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
    ...
    
  9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行

    egrep -v "^$|^#" /etc/ssh/sshd_config | sed  ‘s/#.*.//g‘
    

    技术分享

作业三:

  1. Linux下源码安装Python并设置PATH

    // readline-devel python shell里 方向键可用
    // 机器默认是2.7,安装完之后需要把python命令链接到3.6 
    
    yum -y install zlib zlib-devel gcc readline-devel
    wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz  
    xz -d Python-3.6.1.tar.xz
    tar -xvf Python-3.6.1.tar
    cd Python-3.6.1/
    ./configure
    make all
    make install
    rm /bin/python
    ln -s /usr/local/bin/python3.6 /bin/python  //设置默认python3.6为默认python
    
  2. windows下安装python,并设置PATH

    技术分享

选做题:

  1. 一键是部署nginx、nfs
  2. 编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件
  3. 编写计划任务,定时运行监控脚本,完成监控操作

 










以上是关于10-正则表达式-grep的主要内容,如果未能解决你的问题,请参考以下文章

(10)正则表达式

正则表达式 - grep、sed、awk - 处理大型文本文件

正则介绍grep

grep

正则表达式,grep/egrep工具的使用

shell编程初步grep及正则表达式