当前位置:

Shell脚本:正则表达式

访客 2024-01-05 862 0

目录一、正则表达式简介二、正则表达式的组成三、正则表达式分类四、正则表达式字符用法1.基础正则表达式常见元字符(支持grep、egrep、sed、awk)2.扩展正则表达式元字符(支持:egrep、grep-E、awk、sed-r)五、正则表达式练习1.匹配/etc/fstab中不是以#开头的行2.匹配/etc/passwd中以bash结尾的行3.匹配文件中025开头,后一个字符为"-"""或没有,之后为5或8开头的数字,总位数为11位六、常用正则表达式

一、正则表达式简介

在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。

只有掌握了正则表达式,才能全面地掌握Linux下的常用文本工具(例如:grep、egrep、sed、awk等)的用法。

二、正则表达式的组成

正则表达式由普通字符元字符组成。

  • 普通字符包括大小写字母、数字、标点符号及一些其他符号。
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式,可以使用()括起来指定)在目标对象中的出现模式。

三、正则表达式分类

  1. 基本的正则表达式(BasicRegularExpression又叫BasicRegEx简称BREs)
  2. 扩展的正则表达式(ExtendedRegularExpression又叫ExtendedRegEx简称EREs)
  3. Perl的正则表达式(PerlRegularExpression又叫PerlRegEx简称PREs)

四、正则表达式字符用法

1.基础正则表达式常见元字符(支持grep、egrep、sed、awk)

字符用法\转义字符,用于取消特殊符号的含义,例:\!、\n、\$等表示这些符号本身^匹配字符串开始的位置,例:^a、^the、^#、^[a-z]等表示以...开头$匹配字符串结束的位置,例:word$表示以...结尾^$匹配空行.匹配除\n之外的任意的一个字符,例:go.d表示匹配.处的一个字符*匹配前导字符或表达式0次或者多次,例:goo*d、go.*d表示匹配前一个字符0次或多次[list]

匹配list列表中的一个字符,例:go[ola]d,[abc]表示其中一个字符

[a-z]表示所有小写字母、[a-zA-Z]表示所有大小写字母、[0-9]表示数字

[^list]匹配任意list列表中的一个字符,相当于上一条匹配的结果取反{n}匹配前导字符或表达式n次,例:go\{2\}d、'[0-9]\{2}'匹配两位数字

{n,m}

匹配前导字符或表达式n到m次m不写表示不少于n次,例:[0-9]{2,3}表示两到三位数,[0-9]{2,}表示两位及以上数

\w

\W

匹配包括下划线的任何单词字符

匹配任何非单词字符,。等价于"[^A-Za-z0-9_]"

\d

\D

匹配一个数字字符

匹配一个非数字字符,等价于[^0-9]

\s

\S

空白符

非空白符

注意:

  • 正则表达式在表示时,需要加单引号''或双引号""。
  • grep和sed在使用大括号{}表示正则表达式时,需要加转义字符\表示大括号{}。

2.扩展正则表达式元字符(支持:egrep、grep-E、awk、sed-r)

字符用法匹配前导字符或表达式1次以上,例:god,将匹配至少一个o?匹配前导字符或表达式0次或者1次,例:go?d,将匹配gd或god()将括号中的字符串作为一个整体,例1:g(oo)d,将匹配oo整体1次以上|以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad

五、正则表达式练习

1.匹配/etc/fstab中不是以#开头的行

  • //^代表以...开头,[^#]代表匹配非#
  • [root@localhost1~]#grep"^[^#]"/etc/fstab
  • /dev/mapper/centos-root/xfsdefaults00
  • UUID=552d20a1-63f1-4209-af23-7bcdb31d1c84/bootxfsdefaults00
  • /dev/mapper/centos-swapswapswapdefaults00
  • 2.匹配/etc/passwd中以bash结尾的行

  • [root@localhost1~]#grep"bash$"/etc/passwd
  • root:x:0:0:root:/root:/bin/bash
  • zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
  • lisi:x:1002:1002::/home/lisi:/bin/bash
  • zhaoliu:x:1003:1003::/home/zhaoliu:/bin/bash
  • wangwu:x:1004:1004::/home/wangwu:/bin/bash
  • 3.匹配文件中025开头,后一个字符为"-"、""或没有,之后为5或8开头的数字,总位数为11位

  • [root@localhost1~]#catnumber.txt
  • 02583188500
  • 02583242add
  • 032-asdw223s
  • 025-83223
  • 032023asdwe342d
  • 025-58347282
  • 025-53556635342
  • 023-82342353
  • 02588888888
  • //025开头——>^025
  • //后一个字符为"-"、""或没有(即匹配"-"或""0次或一次)——>[-]?
  • //因为使用了?,需要给grep加-E选项
  • //之后为5或8——>[58]
  • //总位数为11位数字,前面已经有4个,之后匹配7个任意数字——>[0-9]{7}$
  • [root@localhost1~]#grep-E"^025[-]?[58][0-9]{7}$"number.txt
  • 02583188500
  • 025-58347282
  • 02588888888
  • 六、常用正则表达式

  • 发表评论

    • 评论列表
    还没有人评论,快来抢沙发吧~