Skip to content

Linux-通配符与正则

特殊符号

  • root:用户名

  • @:at

  • localhost:主机名

  • $:普通用户标识

  • /:表示根目录

  • :表示并列执行

  • ``:优先执行(相当于数学计算中小括号)

通配符

  • ~:表示的家目录
  • #:表示的是注释
  • *:表示任意
  • :表示任意一个符号
  • {}:表示序列(可以是数字序列,也可用是字母序列)
  • >:清空输出重定向(1表示正确输出重定向,2表示错误输出重定向,&表示无论正确错误都重定向)
  • >>:追加输出重定向(1表示正确输出重定向,2表示错误输出重定向,& 无论正确错误都重定向)
  • <:标准输入重定向
  • <<:标准输入追加重定向
  • .:当前路径
  • ..:上一级路径
  • |:管道符(将管道符左侧命令的执行结果传递到管道符右侧的末尾)
  • &&:表示前面命令执行成功,才执行后面的命令
  • ||:表示或者,前面的命令失败时才执行后面的命令
  • :表示取反
  • &: 并且

正则表达式

分类

工具默认支持的正则类型扩展正则启用方法
grep基本正则(BRE)grep -Eegrep
sed基本正则(BRE)sed -E(GNU)或 sed -r
awk扩展正则(ERE)默认支持,无需额外选项

基本元字符

元字符作用示例
^匹配行首^admin
$匹配行尾error$
^$匹配空行^$
.匹配任意单个字符a.c → abc, a1c
*匹配前一个字符0次到无限次go*d → gd, good
\转义符\.,\*,\\
+匹配前一个字符1次到无限次go+d → god, gooood
?匹配前一个字符 0或1 次colou?r → color/colour
[]匹配中括号中的任意一个字符[aeiou] → 匹配元音字母
[^]取反,不匹配中括号内的字符[^0-9] → 非数字字符
^[]以中括号内任意字符开头^[abc]
``逻辑或(扩展正则)
.*表示任意.*
.*?转为懒惰(尽可能少),匹配到第一个满足条件.*?
{n}精确匹配 n 次(扩展正则)a{3} → aaa
{n,}至少匹配 n 次(扩展正则)a{2,} → aa, aaa…
{,n}匹配前一个字符0次到n次(扩展正则)
{n,m}匹配前一个字符n次到m次(扩展正则)a{2,4} → aa, aaa, aaaa
()用于分组,可以将多个字符作为一个整体进行匹配(abc)

转义字符

字符功能描述示例数据适用场景
\.匹配字符 .\.匹配字符 .,如 a.b 中的 .
\*匹配字符 *\*匹配字符 *,如 a* 中的 *
\+匹配字符 +\+匹配字符 +,如 a+ 中的 +
\?匹配字符 ?\?匹配字符 ?,如 a? 中的 ?
$匹配字符 ($匹配字符 (,如 (abc) 中的 (
$匹配字符 )$匹配字符 ),如 (abc) 中的 )
$$匹配字符 [$$匹配字符 [,如 [abc] 中的 [
$$匹配字符 ]$$匹配字符 ],如 [abc] 中的 ]
\{匹配字符 {\{匹配字符 {,如 {abc} 中的 {
\}匹配字符 }\}匹配字符 },如 {abc} 中的 }
\^匹配字符 ^\^匹配字符 ^,如 ^abc 中的 ^
\$匹配字符 $\$匹配字符 $,如 abc$ 中的 $
``匹配字符 ``

预定义字符类

字符功能描述示例数据适用场景
\d匹配任意一个数字字符\d匹配任意一个数字,如 019 等。
\D匹配任意一个非数字字符\D匹配任意一个非数字字符,如 ab_ 等。
\w匹配任意一个字母、数字或下划线字符\w匹配任意一个字母、数字或下划线,如 a1_ 等。
\W匹配任意一个非字母、数字或下划线字符\W匹配任意一个非字母、数字或下划线字符,如 !@# 等。
\s匹配任意一个空白字符\s匹配任意一个空白字符,如空格、制表符、换行符等。
\S匹配任意一个非空白字符\S匹配任意一个非空白字符,如 a1_ 等。

贪婪与懒惰匹配

字符功能描述示例数据适用场景
*?懒惰匹配前面的字符零次或多次a*?懒惰匹配前面的字符零次或多次,如 a*? 匹配 a 时只匹配一个 a
+?懒惰匹配前面的字符一次或多次a+?懒惰匹配前面的字符一次或多次,如 a+? 匹配 aa 时只匹配一个 a
??懒惰匹配前面的字符零次或一次a??懒惰匹配前面的字符零次或一次,如 a?? 匹配 aa 时只匹配一个 a
{n,}?懒惰匹配前面的字符至少 na{2,}?懒惰匹配前面的字符至少 n 次,如 a{2,}? 匹配 aaa 时只匹配 aa
{n,m}?懒惰匹配前面的字符至少 n 次,至多 ma{2,4}?懒惰匹配前面的字符至少 n 次,至多 m 次,如 a{2,4}? 匹配 aaaa 时只匹配 aa

工具差异与注意事项

工具/语法转义规则特点示例对比
BRE(基础正则)需转义 +?、`{}` 等扩展元字符
ERE(扩展正则)直接支持 +?、``,无需转义
PCRE(Perl兼容)支持零宽断言、命名分组等高级功能grep -P '\d+(?=元)' → 匹配数字后接 "元"
Shell 引号处理单引号 '' 避免变量扩展,双引号 "" 需二次转义grep "\\bword\\b" → 双引号需转义 \