千家信息网

shell 正则表达式

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,通配符 意义* 匹配任意多个字符(包括零个或一个)? 匹配任意一个字符(不包括零个)[characters] 匹配任意一个属于字符集中的字符[!characters] 匹配任意一个不是字符集中的字
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 咖啡豆 合肥互联网科技公司 四个字互联网科技公司取名 农村开互联网科技讲堂 创业天下互联网科技有限公司 成都铂石互联网科技做什么的 互联网还是高科技吗 彤创互联网科技有限公司 江阴互联网智能科技产品进口 消费医药和互联网科技 东莞新华互联网科技学校 中科明德北京互联网科技 互联网时代的科技公司 风投北京互联网科技 工业互联网科技创业 国产互联网科技公司 银川新华互联网科技学校是国营吗 数字科技和互联网金融哪个好 长沙易易互联网科技有限公司 重庆科技产业互联网有哪些 什么是科技互联网 奇酷互联网科技公司 鑫亿盛互联网科技 大白互联网科技 深圳国际航运科技和互联网 宁波青枫互联网科技有限公司 互联网科技人工智能实验室 宇信科技在杭州互联网排第几 有人说阿里系是互联网科技企业 伍佰万互联网科技是干嘛的
0