• 正则表达式的学习使用


    ssh 192.168.4.5
    >提示continue,连接过的主机不会提示
    >连接过的主机 文件存放位置:/root/.ssh/known_hosts


    #####################################################################
    字符串的截取:
    # X=1383838438
    # echo $X
    1383838438
    # echo ${X}
    1383838438
    # echo ${#X}
    10


    第一种
    ${var:起始位置:长度},从第0位开始
    ${X:0:4}
    ${X:3:6}
    ${X::4}

    对下面的数随机取一为做随机密码:
    # X=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    # n=$[RANDOM%62]     26小写字母+26大写字母+10个数字=62  
    # echo ${X:$n:1}

    X=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    pass=''
    for i in {1..6}
    do
      n=$[RANDOM%62]    #26小写字母+26大写字母+10个数字=62
      tmp=${X:$n:1}
      pass=${pass}$tmp
    done
    echo $pass


    第二种
    expr substr $变量 开始位 长度
    # X=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    # expr substr $X 2 3      #从第1位开始数,没有第0位
    bcd
    # expr substr $X 1 3
    abc


    第三种
    echo $变量|cut -b 开始位置-结束位置
    echo $X |cut -b 2-5
    echo $X |cut -b 3,8,11
    ########################################################################

    vim 替换
        :s/old/new


    # X=1383838438
    # echo ${X/3/#}     /表示替换一个数,这里代表将第一个3替换成#
    1#83838438
    # echo ${X//3/#}    //表示替换所有的数,这里代表将所有的3替换成#
    1#8#8#84#8
    注意这种替换并不改变X变量的值
    # echo $X
    1383838438


    掐头、去尾
    ${变量#}     掐头
    ${变量%}    去尾

    # X=`head -1 /etc/passwd`
    # echo $X
    root:x:0:0:root:/root:/bin/bash
    # echo ${X#*:}              一个#代表最短的*:内容  掐掉开头
    x:0:0:root:/root:/bin/bash
    # echo ${X##*:}             两个##代表最长的*:内容  掐掉开头
    /bin/bash


    # echo ${X%:*}              一个%代表最短的*:内容  去掉尾巴
    root:x:0:0:root:/root
    # echo ${X%%:*}             两个%%代表最长的*:内容  去掉尾巴
    root

    ##############################################################
    echo ${变量:开始:长度}    截取
    echo ${变量/old/new}      替换
    echo ${变量#}             掐头
    echo ${变量%}             去尾
    echo ${变量:-}             初始化

    touch {a、b、c、d、e、f}.txt

    批量重命名:将.txt改为.doc
    for i in `ls *.txt`
    do
       mv $i ${i%.*}.doc
    done

    ###############################################################

    数组:一个变量存多个值
    X=(11 22 33 aa bb cc)
    # echo ${X[0]}
    11
    # echo ${X[1]}
    22
    # echo ${X[4]}
    bb
    # echo ${X[*]}
    11 22 33 aa bb cc

    ##############################################################
    非交互式发送邮件
    echo "内容" |mail       #不需要文件  
    mail < 文件                       #需要另外一个文件,内容可以很复杂


    yum -y install expect 非交互的工具expect
    vim test.sh
    mail -s error root << EOF    end of life
    内容
    内容
    内容
    ......
    EOF
    #############################################################

    #!/bin/bash
    rm -rf /root/.ssh/known_hosts     #所有已经连接过的主机存储为这个位置,删掉后会>提示未连接过的主机,要不要继续远程登录
    expect << EOF
    spawn ssh 172.25.0.10
    expect "continue" {send "yes "}
    expect "passwd" {send "redhat "}
    expect "#"      {send "touch /a.txt "}
    expect "#"      {send "exit "}
    EOF

    3个问题
      1、continue的问题
    rm -rf /root/.ssh/known_hosts     #所有已经连接过的主机存储为这个位置,删掉后会>提示未连接过的主机,要不要继续远程登录
        2、超时问题
    set timeout
        3、最后一行不执行


    ####################################################################################
    正则表达式:使用特殊符号去表达的一种方式
    ^   开始
    $   结尾
    []   集合、取之一

    [abcdef56789]==[a-f,5-9]==[5-9,a-f]
    [abc]==[cba]==[bac]==[bca]==[cab]==[acb]

    [^]   对集合内容取反
    .      任意单个字符,同?
    *     匹配前一个字符出现了任意次
    .*    匹配任意长度的任意所有
    {n,m}   匹配前一个字符出现了n到m次  
    {n,}    匹配n个以上的(包括n个)
    {n}     匹配n个   
            grep a{3,5} 匹配3到5个a; grep a{3,} 匹配3个以及3个以上的a; grep a{3} 匹配3个a

    #####################################################################################
    unset 变量    #清除变量的值
    [a-Z]==[a-z,A-Z]


    扩展正则表:(简化基本,扩展新的)
    {2,5}----------------->{2,5}
    ()                         ()
    *任意次                   ? 前面的字符出现0次或1次
                                   +  前面的字符出现至少1次
    ()整体                      (abc)+
                     abc  abccc  abccccc...
    |或者                        (test|taste)

    扩展正则:写的简单,兼容性差(支持正则的不一定支持扩展)
    基本正则:写的麻烦,兼容性强(几乎所有支持正则的都支持)
     
    grep不支持扩展正则  
    egrep支持扩展正则
    grep -E 扩展正则  用grep调用egrep来支持扩展正则

    egrep "the" txt   #代表单词边界
    ###################################################################################
    ()      保留(复制)
    ()          保留(复制)
    1        将保留的第一个复制出来

    vim a.txt
        abcdefabcdefabcdefabcdef
    grep "(abcdef)111" a.txt  将()里面的保留内容复制粘贴3遍  所有的字母都变红

    vim a.txt
        abcdefabcdeffqwerfqwer
    grep "(abcdef)1(fqwer)2" a.txt  将第一()里面的保留内容复制粘贴1遍;将第二()里面的保留内容复制粘贴1遍  所有字母都变红

    vim a.txt
    hello the world
    ni hao ya
    san li tun jian
    把第一个字母和最后一个字母对调
    sed -r 's/^(.)(.*)(.)$/321/' a.txt
    ##################################################################################################

    正则表达式练习

    "Open Source" is a good mechanism to develop programs.
    apple is my favorite food.
    Football game is not use feet only.
    this dress doesn't fit me.
    However, this dress is about $ 3183 dollars.
    GNU is free air not free beer.
    Her hair is very beauty.
    I can't finish the test.
    Oh! The soup taste good.
    motorcycle is cheap than car.
    This window is clear.
    the symbol '*' is represented as start.
    Oh!    My god!
    The gd software is a library for drafting programs.
    You are the best is mean you are the no. 1.
    The world <Happy> is the same with "glad".
    I like dog.
    google is the best tools for search keyword.
    goooooogle yes!
    go! go! Let's go.
    # I am VBird

    对上面的一段文字进行如下操作:

    过滤下载文件中包含 the 关键字
    过滤下载文件中丌包含 the 关键字
    过滤下载文件中丌论大小写 the 关键字
    过滤 test 或 taste 这两个单字
    过滤有 oo 的字节
    过滤丌想要 oo 前面有 g 的
    过滤 oo 前面丌想有小写字节
    过滤有数字的那一行
    过滤以 the 开头的
    过滤以小写字母开头的
    过滤开头丌是英文字母
    过滤行尾结束为小数点.那一行
    过滤空白行
    过滤出 g??d 的字串
    过滤至少两个 o 以上的字串
    过滤 g 开头和 g 结尾但是两个 g 之间仅存在至少一个 o
    过滤任意数字的行
    过滤两个 o 的字串
    过滤 g 后面接 2 到 5 个 o,然后在接一个 g 的字串
    过滤 g 后面接 2 个以上 o 的

    参考答案

    [root@desktop1 ~]# grep -n 'the' regular_express.txt
    [root@desktop1 ~]# grep -vn 'the' regular_express.txt
    [root@desktop1 ~]# grep -in 'the' regular_express.txt
    [root@desktop1 ~]# grep -n 't[ae]st' regular_express.txt          # grep -n 't[ae]ste{0,1}'  regular_express.txt   这个命令更好
    [root@desktop1 ~]# grep -n 'oo' regular_express.txt
    [root@desktop1 ~]# grep -n '[^g]oo' regular_express.txt
    [root@desktop1 ~]# grep -n '[^a-z]oo' regular_express.txt
    [root@desktop1 ~]# grep -n '[^[:lower:]]oo' regular_express.txt
    [root@desktop1 ~]# grep -n '[0-9]' regular_express.txt
    [root@desktop1 ~]# grep -n '[[:digit:]]' regular_express.txt
    [root@desktop1 ~]# grep -n '^the' regular_express.txt
    [root@desktop1 ~]# grep -n '^[a-z]' regular_express.txt
    [root@desktop1 ~]# grep -n '^[[:lower:]]' regular_express.txt
    [root@desktop1 ~]# grep -n '^[^a-zA-Z]' regular_express.txt        #grep -n '^[^a-Z]' regular_express.txt     #grep -vn '^[a-zA-Z]' regular_express.txt
    [root@desktop1 ~]# grep -n '^[^[:alpha:]]' regular_express.txt
    [root@desktop1 ~]# grep -n '.$' regular_express.txt
    [root@desktop1 ~]# grep -n '^$' regular_express.txt
    [root@desktop1 ~]# grep -n 'g..d' regular_express.txt
    [root@desktop1 ~]# grep -n 'ooo*' regular_express.txt      # grep -n 'o{2,}' regular_express.txt    
    [root@desktop1 ~]# grep -n 'goo*g' regular_express.txt   
    [root@desktop1 ~]# grep -n 'goo*g' regular_express.txt
    [root@desktop1 ~]# grep -n '[0-9][0-9]*' regular_express.txt
    [root@desktop1 ~]# grep -n 'o{2}' regular_express.txt
    [root@desktop1 ~]# grep -n 'go{2,5}g' regular_express.txt
    [root@desktop1 ~]# grep -n 'go{2,}g' regular_express.txt    #正确为grep -n 'go{2,}' regular_express.txt  g后面接两个以上的o

    注意!!#grep -n '^goo*g' regular_express.txt 表示以“g“开头的行   

                  #grep -n 'goo*g$' regular_express.txt  表示以“*g“结尾的行

                  #grep -n '^goo*g$^' regular_express.txt  表示以“g“开头且以“g“结尾,中间是至少两个o或两个o以上的行

  • 相关阅读:
    编译和安装在Windows上橡胶树 (Compiling and Installing Yate on Windows)
    Microsoft Sync Framework 2.1 可再发行程序包 Microsoft Sync Framework 1.0 SP1
    Kwickserver
    .net平台 基于 XMPP协议的即时消息服务端简单实现
    开源jabber(XMPP)架设内部即时通讯服务的解决方案
    www.mentalis.org/
    VM虚拟机ping不通局域网其他主机的解决办法
    VM Workstation的Unity Mode有什么用
    Office WORD EXCEL批量查找和替换技巧实例
    Visual Studio VS如何拷贝一个项目的窗体文件到另一个项目
  • 原文地址:https://www.cnblogs.com/baichuanhuihai/p/8133950.html
Copyright © 2020-2023  润新知