正则表达式

正则表达式
正则表达式(或称Regular Expression,简称RE),是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的分割,匹配、査找及替换操作。即正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

这种枯燥的概念难理解,其实,正则表达式是用来匹配文件中的字符串的方法。它会先把整个文本分成一行一行的字符串,然后从每行字符串中搜索是否有符合正则表达式规则的字符串,如果有则匹配成功,如果没有则匹配失败。
注:正则表达式和通配符的区别(正则表达式用来在文件中匹配符合条件的字符串,通配符用来匹配符合条件的文件名)。其实这种区别只在 Shell 中适用,因为用来在文件中搜索字符串的命令,如 grep、awk、sed、vi 等可以支持正则表达式,而在系统中搜索文件的命令,如 ls、find、cp 等不支持正则表达式,所以只能使用 Shell 自己的通配符来进行匹配了。
在正则表达式中,我们把用于匹配的特殊符号又称作元字符。在shell中,元字 符又分为基础元字符(BRE)和扩展元字符(ERE)。

                基础元字符

元字符 作 用

  • 匹配前面的一个字符或子表达式0次或任意多次。如:ahello匹配所有0个或多个a后,紧跟hello的行。即hello前面可以有任意多个a。
    . 匹配除换行符和回车符(“\n”和"\r")外的任意一个字符。例如:l…e匹配包含一个l,后跟两个任意字符,然后跟一个e的行。
    .
    表示匹配任意长度字符串
    ^ 匹配行首。例如,^hello 会匹配以 hello 开头的行。
    $ 匹配行尾。例如,hello$ 会匹配以 hello 结尾的行
    ^$ 匹配空行
    [] 匹配中括号中指定的任意一个字符,而且只匹配一个字符。例如[aoeiu]匹配任意一个元音字母, [0-9] 匹配任意一位数字,[a-z][0-9] 匹配由小写字母和一位数字构成的两位字符,[a-zA-Z] 匹配任意一位英文字母

[^] 匹配除中括号中的字符以外的任意一个字符。例如,[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母,
注意:可以用^标记做[]内的前缀,表示除[]内的字符以外的任意一个字符。比如:搜索oo前没有g的字符串的行,应用 ‘[^g]oo’ 作搜索字符串。符号如果出现在[]的起始位置表示否定,但是在[]的其他位置是普通字符。[ab^c] 匹配除了a、b、^、c以外的任意单个字符。
\ 转义符,用于取消特殊符号的含义,使该特殊字符成为普通字符。例如:^.[0-9][0-9]表示匹配以一个句点和两个数字开始。
{n} 表示其前面的字符出现 n 次。例如,[0-9]{4} 匹配4位数字,1[35-9][0-9]{9} 匹配手机号码。
{n,} 表示其前面的字符出现不少于 n 次。例如,[0-9]{2,} 匹配两位及以上的数字
{n,m} 表示其前面的字符至少出现 n 次,最多出现 m 次。例如,[a-z]{6,8} 匹配 6〜8 位的小写字母
<
> 匹配词(word)的开始(<)和结束(>)。例如正则表达式<the>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。
扩展正则表达式
熟悉正则表达式的人应该很疑惑,在正则表达式中应该还可以支持一些元字符,比如"+"、"?"、"|"、"()"。
其实 Linux 是支持这些元字符的,只是 grep 命令默认不支持而已,因为grep把这些扩展元字符看成是普通符号,如果要想支持这些元字符,则可以使用 egrep 或 grep -E 命令。所以我们又把这些元字符称作扩展元字符。
如果査询 egrep 命令的帮助,对 egrep 的说明就是和 grep -E 一样的命令,
Shell 中支持的扩展元字符。
扩展元字符 描述

  • 匹配前面的一个字符或子表达式1次或任意多次。
    如“go+gle”会匹配“gogle” “google”或“gooogle”。当然,如果“o”有更多个,则也能匹配。
    egrep “go+gle” filename或grep -E “go+gel” filename
    ? 匹配前面的一个字符或子表达式零次或一次。例如:如 “colou?r” 可以匹配 “colour” 或 “color”
    | 表示或。如“was|his”既会匹配包含“was”的行,或匹配包含“his”的行
    () 将括号里的内容看成是一个整体。可以理解为由多个单个字符组成的大字符。
    如“(dog)+”会匹配“dog” “dogdog” “dogdogdog”等,因为被()包含的字符会被当成一个整体。但 “hello(world|earth)” 会匹配 “hello world” 及 “hello earth”
    注:"+"、"?"、"|"、"()"、"{}“等扩展元字符egrep命令或grep -E是支持的。grep命令在不加-E选项的情况下可以按如下格式写:”+"、"?"、"|"、"()"、"{}"

    1、"":前一个字符匹配0次或任意多次
    注意,"
    “和通配符中的”"含义不同,它代表前一个字符重复 0 次或任意多次。比如,"a"并不是匹配"a"后面的任意字符,而是可以匹配所有内容,包括空白行。
    2、".":匹配除换行符和回车符外的任意一个字符
    正则表达式".“只能匹配一个字符,这个字符可以是任意字符。
    3、”^":匹配行首,"KaTeX parse error: Can't use function '\"' in math mode at position 139: …匹配一个 o 字符。 5、:"\̲"̲:转义符 转义符会取消特殊符号…“是不行的,因为”.“在正则表达式中有特殊含义,代表任意一个字符。所以需要在前面加入转义符,如”.$"。
    6、"{n}":表示其前面的字符出现 n 次
    "{n}"中的 n 代表数字,这个正则表达式会匹配前一个字符出现 n 次的字符串,比如"zo{3}m"只能匹配"zooom"这个字符串。例如,"a{3}"就会匹配 a 字母连续出现 3 次的字符串。

egrep -v “#|$” /etc/ssh/sshd_config(显示sshd_config文件中有效的配置项)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值