千家信息网

shell 正则表达式

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,通配符 意义* 匹配任意多个字符(包括零个或一个)? 匹配任意一个字符(不包括零个)[characters] 匹配任意一个属于字符集中的字符[!characters] 匹配任意一个不是字符集中的字
千家信息网最后更新 2025年12月04日shell 正则表达式

通配符     意义

  *         匹配任意多个字符(包括零个或一个)
  ?         匹配任意一个字符(不包括零个)
  [characters]    匹配任意一个属于字符集中的字符
  [!characters]    匹配任意一个不是字符集中的字符
  [[:class:]]     匹配任意一个属于指定字符类中的字符

  

   字符类         意义

  [:alnum:]      匹配任意一个字母或数字
  [:alpha:]       匹配任意一个字母
  [:digit:]       匹配任意一个数字
  [:lower:]      匹配任意一个小写字母
  [:upper]       匹配任意一个大写字母



基础正则表达式符号

符号描述实例
.代表单个字符(必须存在)

a..b

可以表示acdb

aaab 、abbbb

但不可以表示acb、ab、aba等

*

要和通配符区分开,匹配 * 前面一个字符的0个或多个

*后面的字符一定要在*前面字符的后面

另外*前后字符必须相邻否则匹配不到

a*b

可以表示ab、aab、b、abababab

但不可以表示acb、ba等

acb只会匹配到b,也就是视为b前面有0个a

ba也只会匹配到b,同样视为b前面有0个a

^匹配 ^ 后面字符串开头

输入:echo -e abcd\accc | grep "^ab"

输出:abcd

$匹配 $ 前面字符串结尾

输入:echo -e abcd\accc | grep "cc$"

输出:accc

.*匹配任意个字符(0到多个)

a.*b

和通配符里面的 * 大致类似

可以代表ab、 acb、 a……b

但不能代表b……a

[]

表示范围,可以用来进行模糊匹配

常用选项为【a-z】 【0-9】

1. grep【0-9】 text 过滤出含数字的行

2. grep【a-z】 text 过滤出含小写字母的行

3. grep 【abc】 text 过滤出含有a,b,c的行(注意这个abc是分别匹配,也就是相当于匹配含有a的行,b的行,c的行,并不是字符串abc的行

{}

{n,m}表示匹配 {} 前面字符的至少n个,最多m个 字符,注意:是连在一起的连续字符

还可以为{n,}表示至少有n个

{,m}表示最多有m个

1.输入echo abbcdfbjk | grep -E "b{1,2}"

输出 abbcdfbjk

2. 如果 输入 echo abbcdfbjk | grep -E "b{2,}" #表示至少两个

输出结果为 abbcdfbjk 可以看到只有连在一起的两个bb被匹配到,也就是说明了{}里面的数字表示的不是匹配到的个数,而是匹配字符的长度,像这个例子就是要求出现 b 的长度至少是2,所以只有 bb 被匹配到了

3. 输入 grep -E "ac{2,5}b" 匹配a和b之间至少2个最多5个c的行,但是acb要连在一起

【^】【^a】表示匹配 a 以外的所有字符

输入 echo -e abc \ def \ lmn | grep "[^f-z]"

输出 abc def lmn,只有[a-e]配匹配到

^[^]匹配 ^[^a]中的以a为开头以外的所有行grep "^[^#]" /etc/passwd 匹配 /etc/passwd 里面不以#开头的所有行
\< ; \>

锚定 单词首部 (尾部)

表示在匹配在首部(尾部)以空格或特殊字符为分隔的指定字符。如果同时锚定首尾 \< \> 则表示这个字符的准确匹配,它的前后为特殊字符或空格分隔,不会和任何字符直接连接

注意:必须要加 \ 转义,即使使用扩展正则也要加 \ 进行转义

输入 :echo "hi,rootamroot" | grep "\输出:hi,rootamroot

输入: echo "hiroot iamroot" | grep "root\>"
输出: hiroot iamroot

输入: echo "hi,root iamroot" | grep "\"
输出:hi,root iamroot

()

\1 调用前面的参数-第一个分组(也就是括号里的参数)

如果用扩展正则则不需要 \ 来进行转义

过滤出一行中有两个相同数字的行

# grep "\([0-9]\).*\1" /etc/passwd

过滤出行首和行位字母相同的行

# grep "^\([a-z]\).*\1$" /etc/passwd

扩展正则

 扩展正则包含基础正则,而且多出了 + ? | ()四个指令(注意这里的 | 要和管道符分开)   扩展正则不需要像基础正则一样对某些符号进行转义(一般是用 反斜杠 \ 来进行)


+

作用:重复一个或者一个以上的前一个字符

示例:执行"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"字符串的意思



字符 字符串 输入 输出 正则 字母 两个 作用 多个 数字 示例 查询 也就是 命令 开头 符号 转义 代表 只有 基础 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 树莓派配置与云服务器配置 华为hpibm服务器价格表 国外访问国内服务器速度 上海最好软件开发公司 数据库中字段名是列还是行 松江区会计软件开发活动简介 软件开发计划中关键需求保证 战地5开服务器要几个人 服务器文件怎么分类 数据库期末考试试题 生产管理信息系统服务器招标 yemalu最新服务器是什么 小学维护网络安全小方法 赤兔网络技术有限公司怎么样 基于大智慧的软件开发 滨湖区互联网智能科技产品要求 利用数据库管理企业财务 郑州高新区网络安全周 高中信息技术用什么数据库 服务器如何安全防护 数据服务器对电脑配置要求 码 数据库 广元高密度存储服务器加盟 微信小程序云数据库速度慢 上海双凌电脑软件开发中心 查询数据库中重复的字段 惠普服务器专用内存 lol各服务器名称含义 支付宝网络技术有限梗 数据库是如何实现连接的
0