Linux:正则表达式

这篇具有很好参考价值的文章主要介绍了Linux:正则表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、grep和元字符

        1.1、grep

        1.2、元字符

二、正则匹配

         2.1、查找特定的字符

         2.2、使用[]来查找集合字符

        要查找short和shirt时

        要查找包含重复或单个字符oo时

         查找oo前面不是w的字符串

        2.3、查找行首"^"与行尾字符"$"

        查找以.结尾的行 

        查询空行

         2.4、查找任意一个字符“.”与重复字段“*”

         查询多个o

        查找w开头d结尾至少包含一个o 

         查询以 w 开头 d 结尾,中间的字符可有可无的字符串。

         2.5、查找连续字符范围{}

        查找两个o字符

        查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串

        查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串 

三、扩展正则表达式

四、正则的一些实用写法


        正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定的字符串。

        这里不得不提的是shell三剑客:grep,sed,awk。

一、grep和元字符

        1.1、grep

grep [选项]  [查找条件(正则)]  [目标文件]

-E:开启扩展的正则表达式
-c:计算找到'搜寻字符串'的次数
-i:忽略大小写的不同,所以大小写视为相同
-o:只显示被漠视匹配到的字符串
-v:反向选择,即输出没有匹配到的那些字符
--color=auto:可以将找到的关键词部分加上颜色的显示!
-n:顺便输出行号
-w:表示精确匹配一个字符

        1.2、元字符

^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配"^"字符本身,需要转移"\^"
$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则"$"也匹配'\n'或'r'
. “.”代表除"\n\s"之外的任何单个字符
\ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的 特殊意义
* 匹配前面的子表达式零次或多次。要匹配"*"字符,要进行\转移
[ ] 字符集合,匹配所包含的任意的一个字符
[^] 复制字符集。匹配未包含在[ ]内的任意一个字符
[n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如[a-z]可以匹配到a到z范围内的任意一个小写字母字符
{n} n是一个非负整数,匹配确定的n次,例如“o{2}”不能匹配“Bob”中的“o”,但是能匹配到“food”中的“oo”
{n,} n是一个非负整数,至少(最少)匹配n次。例如,“o{2,}”不能匹配"Bob"中的“o”,但是能匹配“fooooood”中的所有o。“o{1.}”等于“o+”
{n,m}

n和m均为非负整数,其中n<=m,最少匹配n次,最多匹配m次

二、正则匹配

        准备一个文本文件用于演示 Linux:正则表达式

         2.1、查找特定的字符

grep -n 'the' test.txt

Linux:正则表达式

 grep -vn 'the' test.txt  #匹配除了包含the的行

Linux:正则表达式

         2.2、使用[]来查找集合字符

        要查找short和shirt时

        比如我们要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含sh与rt。此时执行下面命令可以提示查找到“shirt”和“short”这两个字符串,其中“[]”无论有几个字符,都代表一个字符,但是会按照[]内的每个字符都去做一次匹配,比如[io]表示要匹配i或者o。

grep -n "sh[io]rt" test.txt

Linux:正则表达式

        要查找包含重复或单个字符oo时

grep -n 'oo' test.txt

 Linux:正则表达式

         查找oo前面不是w的字符串

        若查找“oo”前面不是“w”的字符串,只需要通过集合字符的反向选择“[A]”来实现该目的。例如执行“grep -n‘[^w]oo’test.txt”命令表示在 test.txt 文本中查找“oo”前面不是“w”的字符串。

grep -n '[^w]oo' test.txt

Linux:正则表达式

         在上述命令的执行结果中发现“woood”与“wooooood”也符合匹配规则,二者均包含“w”。
其实通过执行结果就可以看出,符合匹配标准的字符加粗显示,而上述结果中可以得知, “#woood #”中加粗显示的是“ooo”,而“oo”前面的“o”是符合匹配规则的。同理“#woooooood#”
也符合匹配规则。

grep -n '[0-9]' test.txt

 Linux:正则表达式

        2.3、查找行首"^"与行尾字符"$"

grep -n '^the' test.txt

Linux:正则表达式

 grep -n '^[a-z]' test.txt

Linux:正则表达式

 grep -n '^[A-Z]' test.txt 

Linux:正则表达式

        查找以.结尾的行 

 grep -n '\.$' test.txt

Linux:正则表达式

        查询空行

 grep -n '^$' test.txt    #查看空行

Linux:正则表达式

         2.4、查找任意一个字符“.”与重复字段“*”

grep -n'w..d' test.txt 

Linux:正则表达式

         查询多个o

        在上述结果中,“wood”字符串“w..d”匹配规则。若想要查询 oo、ooo、ooooo 等资料, 则需要使用星号(*)元字符。但需要注意的是,“*”代表的是重复零个或多个前面的单字符。 “o*”表示拥有零个(即为空字符)或大于等于一个“o”的字符,因为允许空字符,所以执行“grep -n'o*'test.txt”命令会将文本中所有的内容都输出打印。如果是“oo*”,则第一个 o 必须存在, 第二个 o 则是零个或多个 o,所以凡是包含 o、oo、ooo、ooo,等的资料都符合标准。同 理,若查询包含至少两个 o 以上的字符串,则执行“grep -n 'ooo*' test.txt”命令即可。

grep -n'ooo*' test.txt    #匹配两个以上的o

Linux:正则表达式   

        查找w开头d结尾至少包含一个o 

 grep -n'woo*d' test.txt   

#查询以 w 开头 d 结尾,中间包含至少一个 o 的字符串,执行以下命令即可实现。

Linux:正则表达式

         查询以 w 开头 d 结尾,中间的字符可有可无的字符串。

 grep -n 'w.*d' test.txt

 Linux:正则表达式

            执行以下命令即可查询任意数字所在行    

grep -n '[0-9][0-9]*' test.txt 

Linux:正则表达式

         2.5、查找连续字符范围{}

        在上面的示例中,使用了“.”与“*”来设定零个到无限多个重复的字符,如果想要限制一个 范围内的重复的字符串该如何实现呢?例如,查找三到五个 o 的连续字符,这个时候就需 要使用基础正则表达式中的限定范围的字符“{}”。因为“{}”在 Shell 中具有特殊意义,所以在 使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符。“{}”字符的使用方法如下所示。 

        查找两个o字符

grep -n 'o\{2\}' test.txt

 Linux:正则表达式

        查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串

grep -n 'wo\{2,5\}' test.txt

Linux:正则表达式

        查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串 

grep -n'wo\{2,\}d' test.txt

 Linux:正则表达式

 三、扩展正则表达式

+       
        作用:重复一个或者一个以上的前一个字符
        示例:执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood" "woooooood"等字符串
?     
        作用:零个或者一个的前一个字符
        示例:执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串
| 
        作用:使用或者(or)的方式找出多个字符
        示例:执行“egrep -n 'of|is|on'test.txt”命令即可查询"of"或者"if"或者"on"字符串
() 
        作用:查找“组”字符串
        示例:“egrep-n't(a|e)st'test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e” 列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
()+ 
        作用:辨别多个重复的组
        示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意

四、正则的一些实用写法

        比如我们要查看apache中有哪些IP对我们进行了访问,并进行计数

cat access_log | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'  | sort -n | uniq -c | sort -nr | head -10

[0-9]\{1,3\}:匹配0-9的数字三次

\.:IP的分割符“.”

这样循环4次,就能识别网络IP

sort -n :对数字开头字符进行排序

sort -nr:对数字开头字符逆向排序

uniq -c:对重复项进行计数

###后面文章我也会对sort和uniq详细说明###

执行效果:

Linux:正则表达式文章来源地址https://www.toymoban.com/news/detail-434237.html

到了这里,关于Linux:正则表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【面试算法——动态规划 21】正则表达式匹配(hard)&& 交错字符串

    链接: 10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: 输入:s = “aa”

    2024年02月08日
    浏览(48)
  • 【正则表达式】正则表达式常见匹配模式

    模式 描述 w 匹配字母数字及下划线 W 匹配非字母数字下划线 s 匹配任意空白字符,等价于 [tnrf]. S 匹配任意非空字符 d 匹配任意数字,等价于 [0-9] D 匹配任意非数字 A 匹配字符串开始 Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 z 匹配字符串结

    2024年02月09日
    浏览(78)
  • Linux学习之正则表达式元字符和grep命令

    cat /etc/redhat-release 看到操作系统的版本是 CentOS Linux release 7.6.1810 (Core) , uname -r 可以看到内核版本是 3.10.0-957.21.3.el7.x86_64 。 正则表达式是一种搜索字符串的模式,通俗点理解,也就是普通字符和元字符共同组成的字符集合匹配模式。正则表达式的主要作用是文本搜索和字符

    2024年02月14日
    浏览(44)
  • 正则表达式 (用于灵活匹配文本的表达式)

    目录 . * 用于匹配任意单个字符,除了换行符。 例如使用正则表达式 a.b, 它可以匹配aab、acb、a#b 用于匹配前一个字符零次或多次。 例如,使用正则表达式 ab*c ,它可以匹配 \\\"ac\\\"、\\\"abc\\\"、\\\"abbc\\\",因为 b* 表示匹配零个或多个字符 \\\"b\\\"。所以,这个表达式可以匹配 \\\"ac\\\"(零个 \\\"b\\\"),

    2024年01月16日
    浏览(61)
  • Java 正则表达式匹配

    正则表达式: 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右匹配文本,每个源字符只匹配一次。 正则表达式 匹配 this is text 精确匹配

    2024年02月06日
    浏览(61)
  • 正则表达式的神奇世界:表达、匹配和提取

    正则表达式,这个看起来像密林中的迷宫的工具,既神秘又令人着迷。它是编程世界中的一门魔法,有着神奇的能力。你是否曾经在寻找或解析文本时感到束手无策?或许你想要从海量数据中提取特定信息?这正是正则表达式可以派上用场的时候。本文将带你探索这个神奇的

    2024年02月07日
    浏览(62)
  • VSCode 正则表达式 匹配多行

    VS Code 正则表达式匹配多行 (.|n)*? 案例1: str(.|n)*?, 案例2: const(.|n)*?}$ 案例3: fn(.|n)*?},

    2024年02月02日
    浏览(48)
  • 【动态规划】通配符匹配与正则表达式匹配

    题目描述: 给你一个输入字符串 (s) 和一个字符模式 § ,请你实现一个支持 ‘?’ 和 ‘*’ 匹配规则的通配符匹配: ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而

    2024年02月07日
    浏览(60)
  • 详解正则表达式匹配方法 match()

    在前端开发中,正则表达式是一大利器。所以我们这次就来讨论下match()方法。 match本身是JavaScript语言中字符串对象的一个方法,该方法的签名是 match([string] | [RegExp]) 它的参数既可以是一个字符串,也可以是一个正则表达式。该方法绝大多数都是要使用正则表达式的,所以参

    2024年02月11日
    浏览(48)
  • 剑指 Offer 19. 正则表达式匹配

    剑指 Offer 19. 正则表达式匹配 初始化要考虑主串为空字符串,模式串为 a*b*c* 的形式。 一般情况时,根据模式串是 普通字符 、 \\\'.\\\' 、 \\\'*\\\' 分情况考虑。为 \\\'*\\\' 时,考虑 匹配0次 和 匹配多次 的情况,匹配多次时要注意判断前提是能匹配。

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包