zoukankan      html  css  js  c++  java
  • 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的所有行,还要输出紧接着这行的上下各两行的内容:

      [root@cx2c ~]# 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。

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

      [root@cx2c ~]# 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
      编写正则表达式,将他们匹配出来

      [root@cx2c ~]# adduser abominable
      [root@cx2c ~]# adduser abominate
      [root@cx2c ~]# adduser anomie
      [root@cx2c ~]# adduser atomize
      [root@cx2c ~]# 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 过滤出用户名组成是字母+数字+字母的行

      [root@cx2c ~]# adduser Alex213sb
      [root@cx2c ~]# adduser Wpq2222b
      [root@cx2c ~]# adduser yH438PIG
      [root@cx2c ~]# adduser egon666egon
      [root@cx2c ~]# 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

      [root@cx2c ~]# 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. 编写计划任务,定时运行监控脚本,完成监控操作
  • 相关阅读:
    百度地图API地理位置和坐标转换
    解决Myeclipse中导入自定义的配色方案后,JSP中的js代码块为白色背景的问题
    Windows 平台下Myeclipse 10 中SVN 插件使用教程(TortoiseSVN)
    Java代码通过API操作HBase的最佳实践
    HBase中多Filter查询示例
    使用Ant编译和构建项目指南
    如何在Google Play商店发布多个版本apk
    Android 设备管理API概览(Device Administration API)
    Android呼叫管理服务之会话发起协议(SIP)API
    Android基础知识之String类使用详解
  • 原文地址:https://www.cnblogs.com/cx2c/p/6943247.html
Copyright © 2011-2022 走看看