• 后台运行shell
  • 解决perl: warning: Setting locale failed. perl: warning: Please check that your locale settings
  • 查看,修改时区
  • tools
  • ifconfig eth0|grep -Po --color '\w:\K.*(?= B)' [yjj@centos awk]$ echo axyzba123bcc456 | grep -oP 'x|(?<=a).*(?=b)'
  • 它断言自身出现的位置的前面能匹配表达式exp。
  • 比如``(?<=bre)wb``会匹配以re开头的单词的后半部分(除了re以外的部分),
  • 例如在查找reading a book时,它匹配ading。
  • 括号中必须固定长度
  • [root@centos ~]# echo '127.host =  10.0.0.6'
    host =  10.0.0.6
    
    echo ":  456,"   取出456
    (?<=abc).* 可以匹配 abcdefgabc 中的什么
    (?<=\s)\d+(?=\s)
        23w32
    echo "/etc/sysconfig/network-scripts/ifcfg-eth0"
    

    断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。

    echo "https://www.baidu.com/scxzcx"
    echo "https://www.baidu.com     /scxzcx"
    /scxzcx
    echo "https://www.baidu.com/jin/db/scxzcx"|grep -P --color '(?<=[^/]/)[^/]+'
    https://www.baidu.com/jin/db/scxzcx
    

    负向零宽

    负向零宽断言也有“先行”和“后发”两种

    负向零宽后发断言 (?<!表达式)

    负向零宽先行断言 (?!表达式)

    如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词–它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:

    匹配q后面不是字母u的单词

    [root@centos grep_test]# echo -e "query\nqazfg\ndfaq tee"
    query
    qazfg
    dfaq tee
    [root@centos grep_test]# echo -e "query\nqazfg\ndfaq tee"|grep -Po '\b\w+q[^u]\w*\b'
    dfaq tee
    [root@centos grep_test]# echo -e "query\nqazfg\ndfaq tee"|grep -Po '\b\w*q[^u]\w*\b'
    qazfg
    dfaq tee
    

    负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。

    零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。

    \d{3}(?!\d)
    \b((?!abc)\w)+\b
    grep -Po '\d{3}(?!\d)' <<< "1234\n12345\n123abc"
    grep -Po '\d{3}(?=[a-z])' <<< "1234\n12345\n123abc"
    
  • (?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:
    • 匹配前面不是exp的位置
    • 因此匹配前面不是反斜杠的正则表达式应该这样写

      (?<!\\)\*
      (?<![a-z])\d{7}
      (?<=<(\w+)>).*(?=<\/\1>)
      (?<=\bre)\w+\b           查找reading a book时
      (?<=\s)\d+(?=\s)
      \d{3}(?!\d)              匹配三位数字,而且这三位数字的后面不能是数字
      \b((?!abc)\w)+\b         匹配不包含连续字符串abc的单词。
      (?<=<(\w+)>).*(?=<\/\1>)   匹配不包含属性的简单HTML标签内里的内容。
      chiling --- achiling
      lihao  ---   alihao
      [root@localhost ~]# grep -Po '(^[^ ]+).*\1\w+' 123
      qujian --- qujian123
      chiling --- achiling999
      lihao  ---   alihao123
      [root@localhost ~]# ifconfig eth0|grep -Po --color '\w:\K.*(?=  B)'
      10.0.0.7
      [root@localhost ~]# cat 1
      127   127ip1
      abc  abc123
      baidu google123
      123 123sina
      [root@localhost ~]# grep -Po '(\w+)\s.*\1\w+' 1
      127   127ip1
      abc  abc123
      123 123sina
      [root@localhost ~]# grep -Po '(^[^ ]).*\1\w+' 1
      127   127ip1
      abc  abc123
      123 123sina
      [root@localhost ~]# grep -Po '(^.*)\s.*\1\w+' 1
      127   127ip1
      abc  abc123
      123 123sina
      He like his liker.
              He like his lover.
              She love her liker.
              She love her lover.
          1. 删除以上内容当中包含单词“l..e”前后一致的行;
          2. 将文件中“l..e”前后一致的行中,最后一个l..e词首的l换成大写L;
      [root@localhost ~]# grep -Po '<([Hh].>).*\1' 2
      <H1>welcome to my homepage</H1>
      <h2>welcome to my homepage</h2>
      <h3>welcome to my homepage</h3>
      [root@localhost ~]# cat 2
      <div>hello world</div>
      <H1>welcome to my homepage</H1>
      <div>hello world</div>
      <h2>welcome to my homepage</h2>
      <div>hello world</div>
      <h3>welcome to my homepage</h3>
      <div>hello world</div>
      
  •