广告
返回顶部
首页 > 资讯 > 操作系统 >Linux:正则表达式
  • 396
分享到

Linux:正则表达式

正则表达式javashelllinux服务器 2023-09-08 07:09:49 396人浏览 独家记忆
摘要

目录 一、grep和元字符         1.1、grep         1.2、元字符 二、正则匹配          2.1、查找特定的字符          2.2、使用[]来查找集合字符         要查找short和shi

目录

一、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次

二、正则匹配

        准备一个文本文件用于演示 

         2.1、查找特定的字符

grep -n 'the' test.txt

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

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

        要查找short和shirt时

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

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

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

grep -n 'oo' test.txt

 

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

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

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

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

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

 

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

grep -n '^the' test.txt

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

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

        查找以.结尾的行 

 grep -n '\.$' test.txt

        查询空行

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

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

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

         查询多个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

   

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

 grep -n'woo*d' test.txt   

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

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

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

 

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

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

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

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

        查找两个o字符

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

 

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

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

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

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

 

 三、扩展正则表达式

+               作用:重复一个或者一个以上的前一个字符        示例:执行“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详细说明###

执行效果:

来源地址:https://blog.csdn.net/qq_57377057/article/details/126185312

--结束END--

本文标题: Linux:正则表达式

本文链接: https://www.lsjlt.com/news/399530.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux:正则表达式
    目录 一、grep和元字符         1.1、grep         1.2、元字符 二、正则匹配          2.1、查找特定的字符          2.2、使用[]来查找集合字符         要查找short和shi...
    99+
    2023-09-08
    正则表达式 java shell linux 服务器
  • 正则表达式
    2019-01-16 作用 :     路由匹配,表单信息的验证  (字符串匹配) 信息提取(在大段文本中提取信息,爬虫) 字符串的提取和校验 []在中括号内匹配任意项  [^]不匹配中括号中的任意一项    [0-9]  0123......
    99+
    2023-01-30
    正则表达式
  • 如何搞定Linux正则表达式
    如何搞定Linux正则表达式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。元字符通常在Linux中分为两类:She...
    99+
    2023-06-16
  • Linux如何使用正则表达式
    这篇文章将为大家详细讲解有关Linux如何使用正则表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们可以使用 grep 命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一...
    99+
    2023-06-27
  • linux中什么是正则表达式
    这篇文章主要为大家展示了“linux中什么是正则表达式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中什么是正则表达式”这篇文章吧。什么是正则表达式正则表达式就是用一个“字符串”来描述...
    99+
    2023-06-15
  • Linux的grep正则表达式示例
    这篇文章主要介绍“Linux的grep正则表达式示例”,在日常操作中,相信很多人在Linux的grep正则表达式示例问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux的grep正则表达式示例”的疑惑有所...
    99+
    2023-06-12
  • linux中正则表达式怎么用
    小编给大家分享一下linux中正则表达式怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理行为,正...
    99+
    2023-06-13
  • qt 正则表达式
      以上是正则表达式的格式说明 以下是自己写的正则表达式  22-25行 是一种设置正则表达式的方式, 29-34行 : 29行 new一个正则表达式的过滤器对象 30行 正则表达式 的过滤格式 这个格式是0-321的任意数字都可以输入...
    99+
    2023-09-12
    qt
  • java正则表达式
    目录 一、概念 二、正则表达式语法 三、捕获组 四、Pattern类与Matcher类 1.matches( ) 2.split( ) 3.find( ) 4.group 5.start( )和end( ) 6.replace替换 7.re...
    99+
    2023-09-21
    java 正则表达式
  • python 正则表达式
    正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2 ...
    99+
    2023-01-30
    正则表达式 python
  • shell正则表达式
         Shell脚本扩展一 正确表达式正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。1. 支持的命令:grep、vim、fi...
    99+
    2022-10-18
  • ORACLE 正则表达式
    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的...
    99+
    2022-10-18
  • Python_正则表达式
    正则表达式: 匹配字符串   re.compile():用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 两个函数使用,一般建议使用这种编译方式 1 import re 2 str = 'abc1de...
    99+
    2023-01-30
    正则表达式
  • python3-正则表达式
    import re print(re.search("xyx","qxyasdfxuyxyxaqd"))#寻找 print(re.match("xya","qxyasdfxuyxyxaqd"))#从头匹配,失败返回None print(re...
    99+
    2023-01-31
    正则表达式
  • python正则表达式
    笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!-...
    99+
    2023-01-30
    正则表达式 python
  • Python3 正则表达式
    1.导入正则表达式模块 import re 2.匹配数字 print(re.findall('[0-9]','qwe21ewq')) 输出结果: 3.匹配字符 print(re.findall('[a-zA-Z]','abC')) 输出...
    99+
    2023-01-30
    正则表达式
  • PHP正则表达式
    什么是正则表达式? 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文 正则表达...
    99+
    2023-09-02
    正则表达式 php 前端
  • 在python正则表达式中是怎样正确使用正则表达式
    这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python...
    99+
    2023-06-17
  • js正则表达式和php正则表达式有什么区别
    本教程操作环境:Windows10系统、javascript1.8.5&&PHP7.1版、Dell G3电脑。js正则表达式和php正则表达式有什么区别总体上,PHP的正则比标准javascript的要强大。PHP有两套正则...
    99+
    2017-12-02
    JavaScript PHP
  • js正则表达式和php正则表达式有哪些区别
    这篇文章主要介绍了js正则表达式和php正则表达式有哪些区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js正则表达式和php正则表达式有哪些区别文章都会有所收获,下面我们一起来看看吧。区别:1、PHP正则表...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作