Linux初学(五)正则表达式

正则表达式

1.1正则简介

正则表达式,其实就是一些有特殊含义的符号:? . * + ^ $ () {}

注意区分正则和通配符

1、通配符主要是针对文件名,例如找文件名以txt为结尾的:*txt

2、正则主要是针对文件内容的,例如匹配文件的一行内容是以txt为结尾:*.txt

1.2基本正则

1.2.1匹配位置

1、匹配行首                ^

2、匹配行尾                $

3、匹配单词首部         \<

4、匹配单词尾部         \>

案例:

1、找到root的行

        grep "root" a.txt

2、找到root开头的行

        grep "^root" a.txt

3、找到root结尾的行
        grep "root$" a.txt

4、找到包含root单词的行

        grep "\<root\>" a.txt

1.2.2 匹配范围

[ ]                                        表示限定一个范围

[0-9]                                    表示0-9之间的任意一个数字

[a-z]                                    表示任意一个小写字母

[A-Z]                                   表示任意一个大写字母

[0-9a-zA-Z]                         表示人一个数字或者字母

[a-zA-Z]                              表示任意一个字母

[a-Z]                                    表示任意一个字母

[acd39]                                表示这五个字符中的任意一个字符


[[:space:]]                            表示一个空格

[[:digit:]]                               表示任意一个数字

[[:lower:]]                             表示任意一个小写字母

[[:upper:]]                            表示任意一个大写字母

[[:alnum:]]                            表示任意一个数字或者字母

[[:punct:]]                             表示任意一个符号

[[:digit:][:space:]]                  表示一个空格或者任意一个数字

案例:

1、匹配以字母a或c或f为开头的行

        grep "^[acf]"  1.txt

2、匹配以数字或者空格或者#为开头的行

        grep "^[[:space:][:digit:]#]" 1.txt

3、匹配以#为开头,后面是空格,空格后是非空字符

        grep "^#[[:space:]][[:alnum:][:punct:]]

匹配范围以外的字符

[^XXX]

案例:

1、匹配135以外的字符

        grep "[^135]" a.txt


2、匹配不是1 3 5为开头的行

        grep "^[^135]" a.txt

3、匹配以非空格为开头的行

        grep "^[^[:space:]]"  a.txt

1.2.3 次数匹配

.                 表示任意一个字符

*                 表示其前面的字符出现任意次数【任意次可以使0次、1次、无数次】

\{m,n\}        表示其前面的字符出现最少m次,最多n次

\{3,7\}         表示其前面的字符出现最少3次,最多7次

\{3,\}           表示其前面的字符最少出现3次

\{,7\}           表示其前面的字符最多出现7次

\{3,3\}         表示其前面的字符出现3次

?               表示其前面的字符0次或者1次 [最多一次]  -   扩展正则的选项

+                 表示其前面的字符出现最少一次   -   扩展正则的选项

案例:

1、过滤文件a.txt中,a前面至少有3个b的行

        grep "b\{3,\}a"   a.txt


2、过滤文件a.txt中,a前面最多有1个b的行

        grep "b\{,1\}a"  a.txt

        grep -E  "b?a"  a.txt


3、过滤文件a.txt中,a前面最少有1个b的行

        grep -E  "b+a"  a.txt

        grep "b\{1,\}a"  a.txt

4、过滤a和c之间有两个字符的行
        grep "a..c" a.txt

常用的组合

.*        可表示任意个任意字符

案例:

1、匹配以#为开头的行,而且以数字为结尾的行
        grep "^#.*[[:digit:]]$"  a.txt


2、匹配出现了两个数字的行

        grep "[0-9].*[0-9]"  a.txt

1.2.4 分组

\( 定位分组的位置\)

\1        引用第一个分组的内容

\2        引用第二个分组的内容

案例:

1、匹配出现两个相同数字的行

        grep "\([0-9]\).*\1" a.txt

测试代码

i love my lover
he love his liker
she like her lover
she love her liker

输出前后一致的行,例如前后都是love或者前后都是like
        grep -E "(l..e).*\1" a.txt

1.2.5 或

 |   或

测试对象

sadfa cat asfasdf Cat a asdf

案例:匹配cat Cat

grep -E "(c|C)at" 6.txt

grep -E "(cat|Cat)" 6.txt

相关推荐

  1. Linux初学表达式

    2024-03-23 13:58:04       22 阅读
  2. linux 脚本 表达式

    2024-03-23 13:58:04       37 阅读
  3. linux表达式之^

    2024-03-23 13:58:04       33 阅读
  4. linux表达式之*

    2024-03-23 13:58:04       20 阅读
  5. linux扩展表达式()

    2024-03-23 13:58:04       15 阅读

最近更新

  1. mvccaa

    2024-03-23 13:58:04       0 阅读
  2. Linux 常用指令详解

    2024-03-23 13:58:04       0 阅读
  3. 第2章 源码编译构建LAMP

    2024-03-23 13:58:04       0 阅读
  4. 数据库doris中的tablet底层解析

    2024-03-23 13:58:04       0 阅读
  5. 使用Python threading模块创建多线程程序

    2024-03-23 13:58:04       0 阅读
  6. 探索数据的奥秘:sklearn中的聚类分析技术

    2024-03-23 13:58:04       1 阅读

热门阅读

  1. Ubuntu下采用VSCode调试C/C++ (1)

    2024-03-23 13:58:04       18 阅读
  2. 并行流实现两个double [][] 数组相加,加快速度

    2024-03-23 13:58:04       17 阅读
  3. 什么情况下要做艾森克人格测试?

    2024-03-23 13:58:04       20 阅读
  4. 【PostgreSQL的指标采集工具--pgmetrics】

    2024-03-23 13:58:04       22 阅读
  5. Oracle增加节点标准方法, /u01 损坏的处理

    2024-03-23 13:58:04       20 阅读
  6. 面试宝典:MySQL-深度分析可重复读原理

    2024-03-23 13:58:04       19 阅读
  7. LeetCode 热题100 图论专题解析

    2024-03-23 13:58:04       20 阅读
  8. LeetCode-热题100:131. 分割回文串

    2024-03-23 13:58:04       19 阅读
  9. web学习笔记(四十二)

    2024-03-23 13:58:04       21 阅读
  10. LeetCode

    2024-03-23 13:58:04       21 阅读