zoukankan      html  css  js  c++  java
  • Linux_通配符+正则表达式

    系统通配符号:

    *  -- 匹配所有内容信息 

    【应用场景一: 找寻数据信息时】
    find /oldboy -name "*.txt"
    find /oldboy -name "oldboy*"
    find /oldboy -name "oldboy*.txt"
    【应用场景二: 操作管理数据】
    ll /oldboy/oldboy*  
    rm -rf /oldboy/*
    cp -a /oldboy/*  /tmp/
    rm /oldboy/* --> cd /oldboy  rm -rf /*
    

    {} -- 匹配序列内容信息 {01..100} {a..z} {A..Z}

      【应用场景一: 生成序列信息】
      echo {01..10}      --- 生成连续序列
      echo {01..10..2}   --- 生成等差序列  
      [root@localhost ~]# echo {a..z}
        a b c d e f g h i j k l m n o p q r s t u v w x y z
        [root@localhost ~]# echo {a..z..2}
        a c e g i k m o q s u w y
      [root@localhost ~]# echo {01,03,07,08,09}
        01 03 07 08 09
    
      应用场景二: 生成组合序列
      echo {01..03}{A..C}
      01A 01B 01C 02A 02B 02C 03A 03B 03C
    
    
      echo A{,B} --> A AB
      echo oldboy.txt{,.bak} --> oldboy.txt  oldboy.txt.bak
        cp /etc/selinux/config{,.bak}   --- 快速备份数据方法
    
      echo A{B,} --> AB A
      echo oldboy.txt{.bak,} --> oldboy.txt.bak oldboy.txt
      cp oldboy.txt{.bak,}            --- 快速还原数据方法
     

    正则表达式:

    1.正则表达式是一种文本模式匹配,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
    
    它是一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或者从某个字符串中取出某个条件的子串。
    
    2.正则表达式就像数学公式一样,我们可以通过正则表达式提供的一些特殊字符来生成一个匹配对应字符串的公式,用此来从海量数据中匹配出自己想要的数据。
    
    3.正则表达式是一个三方产品,被常用计算机语言广泛使用,比如:shell、PHP、python、java、js等!
    
    4.shell也支持正则表达式,但不是所有的命令都支持正则表达式,常见的的命令中只有grep、sed、awk命令支持正则表达式。

    正则符号 vs 通配符号 

    通配符号: 匹配文件名称信息
    正则符号: 匹配文件内容信息
    
    基础正则符号: basic regular expression -- BRE
    扩展正则符号: extended regular expression -- ERE

    【基础正则 BRE】

    01.定位符使用技巧:同时锚定开头和结尾,做精确匹配;单一锚定开头和结尾,做模糊匹配。 

    定位符    说明
    ^       锚定开头 ^a 以a开头 默认锚定一个字符
    
    $       锚定结尾 a$ 以a结尾 默认锚定一个字符
      

    ^   --- 匹配筛选以什么开头的信息

    找出文件/etc/service 以s开头的信息

      

    找出/oldboy目录中 文件内容是oldboy开头的文件

    老三: grep

    grep "^s" /etc/services
    
    [root@localhost oldboy]# grep -r "^oldboy" /oldboy 
    /oldboy/oldboy.txt:oldboy
    /oldboy/oldbaby.txt:oldboy01
    /oldboy/oldboy01/oldboy.txt:oldboy
    /oldboy/oldboy01/oldbaby.txt:oldboy01

    老二: sed  

    sed -n '/^s/p' /etc/services

    老大: awk

     

    awk '/^s/' /etc/services

     $   --- 匹配筛选以什么结尾的信息

    找出文件/etc/service 以s结尾的信息
    老三: grep
    grep "s$"  /etc/services

    ^$ --- 匹配空行信息

    grep "^$" /etc/services --- 匹配出文件空行
    grep -c "^$" /etc/services --- 统计文件空行数量
    grep "^$" /etc/services|wc -l
    grep -v "^$" /etc/services --- 排除空行不要显示

    .   --- 匹配任意一个且只有一个字符信息

    [root@localhost oldboy]# grep ol.boy oldboy.txt 
    oldboy
    [root@localhost oldboy]# grep ol..boy oldboy.txt 
    ol12boy
    [root@localhost oldboy]# grep "." oldboy.txt 
        I am oldboy teacher!
        I teach linux.
        I like badminton ball ,billiard ball and chinese chess!
        my blog is http://oldboy.blog.51cto.com
        our site is http://www.etiantian.org
        my qq num is 49000448.
        not 4900000448.
        my god ,i am not oldbey,but OLDBOY!
    grop -o: 显示匹配的过程
     

    *  --- 匹配星号字符前面的一个字符 连续出现0次或者多次的情况



    .* --- 匹配所有内容信息


     

     

    正则符号匹配字符信息时,有贪婪匹配特性

      --- 转义符

    1) 将有特殊意义的符号变得没有意义



    2) 将没有页数意义的字符变得有意义
     
    
        --- 换行字符
    
        --- 换行字符
    	    --- 制表符

    3) 取消别名功能
    
    m -rf /oldboy.txt

    二、特殊字符

    匹配符:匹配字符串,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
        它是一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、       
          将匹配的子串替换或者从某个字符串中取出某个条件的子串

     [] - 可以匹配多个任意一个字符

    [abc]: 匹配字符集合内的任意一个字符[a-z,A-Z],[0-9]等
    匹配出文件中所有的字母信息(大小写问题)

     ~~~测试文件中以I开头行和以m开头的行都找出来】


    [^abc]:匹配不包含^后面的任意一个字符的内容

      练习题: 去除文件中所有符号信息
      grep "[^0-9a-Z]" oldboy.txt

    【表示匹配不包含I, ^, o的信息】

    [ ^ ] 表示否定括号中出现字符类中的字符,取反。

    扩展正则符号:

    grep sed awk 直接识别基础正则符号
    grep sed     不能直接识别扩展正则符号
    grep -E/ egrep /sed -r 识别扩展正则信息

    + --- 匹配加号字符前面的一个字符 连续出现1次或者多次的情况

    {} --- 匹配花括号号字符前面的一个字符 匹配指定连续出现多少次

    {n,m} --- 至少连续匹配n次,最多连续匹配m次

    {n}     --- 正好连续匹配n次

    {n,} --- 最少连续匹配n次,最多连续匹配没有限制

    {,m} --- 最少连续匹配0次, 最多连续匹配m次

    ?  --- 匹配问号字符前面的一个字符 连续出现0次或者1次的情况

     证件身份证号的匹配!

     

     | --- 匹配多个字符串信息, 多个字符串之间是或者关系  

    [root@localhost oldboy]# grep -E "oldboy|oldbey" oldboy.txt 
    I am oldboy teacher!
    my ^blog is http://oldboy.blog.51cto.com
    my god ,i am not oldbey,but OLDBOY!
    [root@localhost oldboy]# grep "oldb[oe]y" oldboy.txt 
    I am oldboy teacher!
    my ^blog is http://oldboy.blog.51cto.com
    my god ,i am not oldbey,but OLDBOY!

     ()字符串分组

    1.将多个字符信息汇总为整体进行匹配
    2.将指定信息做替换时。后向引用前项

    【取出/etc/service文件中有#开头的行 和 空行】

    【 排除有#号开头和空行内容】

    echo 123456  --> <123><456>

    echo 123456  --> <1><2><3><4><5><6>
     
    文件的批量重命名:
     
    oldboy01..10.txt --> oldboy01..10.jpg
    sed的后向引用:
    sed -n 's#()()#11#gp' file
    当在前面匹配部分用小括号的时候,第一个括号内容,可以在后面部分用1输出

    1.获取系统ip:



    #字符串的对调

     获取文件的权限

    获取目录的权限

    总结:

  • 相关阅读:
    设计模式之一 简单工厂模式
    PowerShell_7_零基础自学课程_7_Powershell中重定向机制、目录和文件管理
    PowerShell_2_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell
    PowerShell_3_零基础自学课程_3_如何利用Powershell ISE调试PS脚本
    (转)越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用
    (转)直接拿来用!最火的Android开源项目(二)
    (转)iOS编程高性能之路-自动化编译脚本(2)
    (转)iOS编程高性能之路-自动化编译脚本(1)
    (转)How to Install Xcode, Homebrew, Git, RVM, Ruby & Rails on Snow Leopard, Lion, and Mountain Lion
    (转)直接拿来用!最火的Android开源项目(一)
  • 原文地址:https://www.cnblogs.com/zhanghongqi/p/11585523.html
Copyright © 2011-2022 走看看