zoukankan      html  css  js  c++  java
  • 系统通配符号、系统正则符号,grep

    系统通配符号、系统正则符号,grep

    1 系统通配符号

    系统通配符号:借助通配符号 匹配文件名称信息

    1.1 *: 匹配所有(任意)字符信息

    找寻以old开头的文件

    find /oldboy -type f -name "old*"
    

    找寻以.txt结尾的文件

    find /oldboy -type f -name "*txt" 
    

    找寻以old开头,txt结尾的文件

    find /oldboy -type f -name "old*txt" 
    

    1.2 {}: 批量创建数据信息

    echo{01..03}    echo {01..06..2}    echo {01,03,05}

    不同序列信息,可以进行组合
    echo A{A,B} echo A{A,} echo A{,B}

    在这里,可以用序列组合来进行快速备份数据,快速还原数据。

    1.2.1 快速备份网卡配置文件:

    cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak} #备份命令
    
    ll /etc/sysconfig/network-scripts/ifcfg-eth0* #查询备份成功
    


    1.2.2 快速还原网卡配置文件:

    cp /etc/sysconfig/network-scripts/ifcfg-eth0{.bak,}
    

    2 系统正则符合

    系统正则符号:借助正则符号 匹配文件内容信息
    基础正则符号:grep sed awk识别
    扩展正则符号:grep -E、egrep、sed -r、awk、grep '扩展正则符号'

    2.1 基础正则符号

    以下命令执行所需环境
    cat >> oldboy.txt <<EOF
    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!
    EOF

    2.1.1 ^:以什么开头的信息进行过滤

    grep "^I" oldboy.txt
    


    2.1.2 $:以什么结尾的信息进行过滤

    grep "g$" oldboy.txt
    


    2.1.3 ^$:将查找的空行信息过滤

    grep -v "^$" oldboy.txt
    

    2.1.4 . 匹配任意一个且只有一个字符

    grep . oldboy.txt -o	### -o表示命令执行过程
    


    匹配一个字符并且一个字符一行显示出来

    2.1.5 *:匹配前一个字符连续出现0次或者多次

    grep "0*" oldboy.txt -o		### -o表示命令执行过程
    

    grep "0*" oldboy.txt		### 查找0出现的次数
    


    2.1.6 .*:匹配文件所有内容信息

    grep "^m.*g" oldboy.txt	grep "^m.*g " oldboy.txt
    


    .*具有贪婪匹配,会匹配命令里所有m-g的内容,如第一条命令执行的结果。第二条命令在g后面空格,给予限制,所以第二条执行结果会是m-g空格的内容。

    2.1.7 :还原字符的本来意思,转义符号

    grep ".$" oldboy.txt		###  ".$":表示查询所有有字符的行信息  ".$":表示查询出以点结尾的行信息 
    


    将没有意义的字符信息,变成有意义的信息:
    : 制表符 : 换行符 : 换行符

    echo -e "oldboy01
    oldboy02"		### 
    : 换行符	
    


    2.1.8 [] :匹配多个字符信息(或者关系)

    grep [a-z] oldboy.txt
    


    2.1.9 [^]:排除指定的字符信息不要进行匹配

    grep [^a-z] oldboy.txt	###  显示除a-z的所有内容信息
    

    2.2 扩展正则符号

    扩展正则符号

    2.2.1 +:匹配前一个字符连续出现1次或者多次

    grep -E "0+" oldboy.txt
    


    2.2.2 |:匹配的信息之间是或者的关系

    grep -Ev "^$|^#" oldboy.txt    ### 除去空行信息,以#开头信息
    

    -v:命令取反意思 ^$:空行 ^#:以#开头

    显示oldboy信息或者oldbey信息

    grep -E "oldb(o|e)y" oldboy.txt
    


    2.2.3 ():将多个字符信息汇总为一个整体进行过滤

    替换修改文件内容,后项引用前项

    echo 123456|sed "s#123456#<123456>#g"
    

    echo 123456|sed -r "s#(.*)#<1>#g"
    


    (.):匹配之前echo 123456的结果。也就是123456
    1:取用之前(.
    )的内容

    echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#1#g"
    echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#12#g"
    echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#<1>23456#g"
    


    2.2.4 {}:匹配前一个字符连续出现指定的次数

    {n,m} :匹配前一个字符连续最少出现n次 最多出现m次
    grep -E "0{3,5}" oldboy.txt :匹配0连续出现的次数

    grep -E "0{3,5}" oldboy.txt -o -o:显示命令执行过程

    {n} :匹配前一个字符连续正好出现n次
    grep -E "0{3}" oldboy.txt 匹配0连续出现3次

    {n,}:匹配前一个字符连续最少出现n次,最多出现次数没有限制
    grep -E "0{2,}" oldboy.txt 匹配0最少2次,最多没有限制

    grep -E "0{2,}" oldboy.txt -o

    {,m}:匹配前一个字符连续最少出现0次,最多出现次数m次
    grep -E "0{,4}" oldboy.txt

    2.2.5 ?:匹配前一个字符连续出现0次或者1次

    grep -E "o?" oldboy.txt
    


    2.2.6 补充:* + ? 区别

    *:匹配前一个字符连续出现0次或者多次
    +:匹配前一个字符连续出现1次或者多次
    ?:匹配前一个字符连续出现0次或者1次
    正则匹配信息:
    (1)具有贪婪匹配特性:
    (2)过滤时显示的信息不正确
    grep过滤信息,过滤信息外面使用双引号
    sed awk过滤信息,过滤信息外面使用单引号

    3 练习题:如何取出IP地址

    3.1 sed命令取ip

    1、获取ip地址 ip address show eth0 =ip a s eth0

    2、定位显示ip地址的信息行 ip a s eth0|sed -n '3p'

    3、取出指定ip指定信息 ip a s eth0|sed -n '3p'|sed -r "s#^.t (.)#1#g"

    ip a s eth0|sed -n '3p'|sed -r "s#^.t (.)#1#g"|sed -r 's#(.)/24.$#1#g'

    ip a s eth0|sed -n '3p'=inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
    sed -r "s#^.t (.)#1#g"=10.0.0.201/24 brd 10.0.0.255 scope global eth0
    sed -r 's#(.)/24.$#1#g'=10.0.0.201
    4、命令整合:
    (1)

    sed -r 's#^.*t (.*)#1#g'
    sed -r 's#(.*)/24.*$#1#g'
    
    sed -r 's#^.*t (.*)/24.*$#1#g'
    整合后:ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)/24.*$#1#g'
    

    (2)

    sed -n '3p'
    sed -r 's#^.*t (.*)/24.*$#1#g'
    
    sed -nr '3s#^.*t (.*)/24.*$#1#gp'
    整合后:ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#1#gp'
    

    3.2 grep命令取ip

    1、获取ip地址: ip address show eth0

    2、定位显示ip地址的信息行 ip a s eth0|grep -w inet
    w:匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)

    3、取出ip地址信息 ip a s eth0|grep -w inet|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
    "[0-9]+.[0-9]+.[0-9]+.[0-9]+" 对应ip地址格式 +:匹配一个字符连续出现1次或者多次

    ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o|head -1

    -o:显示命令执行过程
    head -1:之前结果取第一行
    命令执行:
    整合:ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o
    整合后:ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+" -o
    ([0-9]+.){3}:[0-9]+.出现3次,将[0-9]+.看成一个整体加上()指定出现3次加上{}=([0-9]+.){3}
    ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}" -o

    "[0-9]+.[0-9]+.[0-9]+.[0-9]+" :在这里面,只有三次[0-9]+. 一次[0-9]+
    将 "[0-9]+.[0-9]+.[0-9]+.[0-9]+" 变为"([0-9]+.){4}"实际上是多加了一个.(点)再执行命令中会显示出/
    ip a s eth0|grep -w inet|grep -E "([0-9]+.?){4}" -o|head -1
    这条命令中,要将.(点)取消
    点===.?
    表示取点的特殊意义
    ?表示匹配前面字符出现0次或1次
    "([0-9]+.?){4}"的结果为:10.0.0.201
    10.0.0.255 取消之前的 / 了
    再取第一行,也就是10.0.0.201了。

  • 相关阅读:
    30 algorithm questions study
    Binary Tree: Write a function to return count of nodes in binary tree which has only one child.
    分布式排序
    android开发中,工程前面有感叹号的解决办法
    android导入工程出现红色感叹号
    INSTALL_FAILED_MISSING_SHARED_LIBRARY错误解决方法
    安卓手机铃声怎么设置
    如何开启Mysql远程访问
    android 链接mysql数据库
    android 连接mysql数据库问题
  • 原文地址:https://www.cnblogs.com/sandshell/p/12624732.html
Copyright © 2011-2022 走看看