• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    shell高级学习之正则表达式

    正则表达式概述

    正则表达式是一种定义的规则,Linux工具可以用它来过滤文本。

    基础正则表达式

    纯文本

    [root@node1 ~]# echo "this is a cat" | sed -n '/cat/p'
    this is a cat
    [root@node1 ~]# echo "this is a cat" | gawk '/cat/{print $0}'
    this is a cat

     正则表达式的匹配非常挑剔,尤其需要记住,正则表达式区分大小写。

    特殊字符

    正则表达式识别的特殊字符包括:

    .*[]^${}\+?|()

    如果要使用某个特殊字符作为文本字符,就必须转义,一般用(\)来转义。

    [root@node1 ~]# echo "this is a $" | sed -n '/\$/p'
    this is a $

    锚字符

    有两个特殊字符可以用来将模式锁定在数据流的行首或行尾

    脱字符(^)定义从数据流中文本行的行首开始的模式。

    美元符($)定义了行尾锚点。

    [root@node1 ~]# echo "this is a cat" | sed -n '/^this/p'
    this is a cat
    [root@node1 ~]# echo "this is a cat" | sed -n '/cat$/p'
    this is a cat

    在一些情况下可以组合使用这两个命令

    1.比如查找只含有特定文本的行

    [root@node1 ljy]# more test.txt  
    this is a dog
    what
    how
    this is a cat
    is a dog
    [root@node1 ljy]# sed -n '/^is a dog$/p' test.txt
    is a dog
    [root@node

    2.两个锚点组合起来,可以直接过滤空白行

    [root@node1 ljy]# more test.txt  
    this is a dog
    what
    how
     
    this is a cat
    is a dog
    [root@node1 ljy]# sed '/^$/d' test.txt 
    this is a dog
    what
    how
    this is a cat
    is a dog

    点号字符

    点号用来匹配除换行符外的任意单个字符,他必须匹配一个字符。

    [root@node1 ljy]# more test.txt
    this is a dog
    what
    how
    this is a cat
    is a dog
    at
    [root@node1 ljy]# sed -n '/.at/p' test.txt
    what
    this is a cat

    字符组

    限定待匹配的具体字符,使用字符组。使用方括号来定义一个字符组。

    [root@node1 ljy]# more test.txt
    this is a dog
    this is a Dog
    this is a DoG
    this is a cat
    [root@node1 ljy]# sed -n '/[dD]og/p' test.txt
    this is a dog
    this is a Dog
    [root@node1 ljy]# sed -n '/[dD]o[gG]/p' test.txt 
    this is a dog
    this is a Dog
    this is a DoG

    排除型字符组

    要排除某些特定的元素,要在字符组前面加个脱字符。

    [root@node1 ljy]# sed -n '/[dD]o[gG]/p' test.txt 
    this is a dog
    this is a Dog
    this is a DoG
    [root@node1 ljy]# sed -n '/[^D]og/p' test.txt 
    this is a dog

    区间

    正则表达式会包括此区间内的任意字符。

    [root@node1 ljy]# more test.txt
    123123
    1231
    121222222
    412345341613
    vsdvs
    qwer12344123
    12345
    34211
    444444
    [root@node1 ljy]# sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' test.txt
    12345
    34211

    拓展正则表达式

    问号

    问号表明前面的字符出现0次或者1次,仅限于此。

    [root@node1 ljy]# echo "bat" | gawk '/ba?t/{print $0}' 
    bat
    [root@node1 ljy]# echo "baat" | gawk '/ba?t/{print $0}'
    [root@node1 ljy]# echo "bt" | gawk '/ba?t/{print $0}' 
    bt

    可以将问号和字符组一起使用

    [root@node1 ljy]# echo "bt" | gawk '/b[ae]?t/{print $0}'
    bt
    [root@node1 ljy]# echo "bat" | gawk '/b[ae]?t/{print $0}'
    bat
    [root@node1 ljy]# echo "bet" | gawk '/b[ae]?t/{print $0}'
    bet
    [root@node1 ljy]# echo "baat" | gawk '/b[ae]?t/{print $0}'

    加号

    加号表明前面的字符可以出现一次或多次,但至少是1次。

    [root@node1 ljy]# echo "baat" | gawk '/b[ae]+t/{print $0}'
    baat
    [root@node1 ljy]# echo "bt" | gawk '/b[ae]+t/{print $0}' 
    [root@node1 ljy]# echo "bt" | gawk '/ba+t/{print $0}' 
    [root@node1 ljy]# echo "bat" | gawk '/ba+t/{print $0}'
    bat
    [root@node1 ljy]# echo "baat" | gawk '/ba+t/{print $0}'
    baat

    花括号

    ERE中的花括号允许你为可重复的正则表达式规定上下限。

    m,n最少出现m此,最多出现n次。

    [root@node1 ljy]# echo "baat" | gawk '/b[ae]{1,2}t/{print $0}' 
    baat
    [root@node1 ljy]# echo "baaat" | gawk '/b[ae]{1,2}t/{print $0}'

    管道符号

    用逻辑or的方式指定正则表达式规则,其中一个条件符合要就即可。

    表达式分组

    正则表达式分组也可以用圆括号进行分组。

    [root@node1 ljy]# echo "bat" | gawk '/b(a|e)t/{print $0}'  
    bat
    [root@node1 ljy]# echo "baat" | gawk '/b(a|e)t/{print $0}'
    [root@node1 ljy]# echo "bet" | gawk '/b(a|e)t/{print $0}' 
    bet

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • shell 正则表达式详细整理
    • Shell正则表达式之grep、sed、awk实操笔记
    • Shell if中的正则表达式使用详解
    • Shell脚本中通过正则表达式匹配IP地址
    • Shell正则表达式验证IP地址
    • PowerShell中正则表达式使用例子
    • linux shell 路径截取正则表达式
    • Shell正则表达式学习笔记
    • PowerShell中使用正则表达式匹配字符串实例
    • 详解Linux--shell脚本之正则表达式
    上一篇:clamscan-Linux查毒工具的命令详解
    下一篇:Linux下使用nextcloud搭建个人网盘代码实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    shell高级学习之正则表达式 shell,高级,学,习之,正则,