有时候我们不知道确切的文件名,只知道命名模式。比如要查找以 db- 开头、中间是日期、以 .sql 结尾的文件,就可以使用正则表达式进行模式匹配。
先准备一份文件名测试清单:
crow@opsbox:~/work$ cp /srv/ops/practice/file-names.txt .
crow@opsbox:~/work$ cat file-names.txt
db-2026-06-28.sql
db-2026-06-30.sql
db-2026-06-30.sql.gz
db-2026-07-01.sql
notes.txt
db-2026-06-3X.sql
用 grep 做基础模式匹配
使用 grep -E 可以启用扩展正则表达式:
crow@opsbox:~/work$ grep -E '\.sql$' file-names.txt
db-2026-06-28.sql
db-2026-06-30.sql
db-2026-07-01.sql
db-2026-06-3X.sql
这里有两个关键点:
$:表示行尾,所以只匹配以.sql结尾的行,排除了.sql.gz;\.:转义普通句点,匹配真实的小数点。如果直接写.,在正则中它代表任意一个字符。
如果想精确匹配“六月份、日期为两位数字的 SQL 文件”:
crow@opsbox:~/work$ grep -E '^db-2026-06-[0-9]{2}\.sql$' file-names.txt
db-2026-06-28.sql
db-2026-06-30.sql
各部分含义如下:
^:表示行首;[0-9]{2}:表示恰好两个连续数字,因此能排除3X这种非法日期。
如果想同时匹配六月和七月的备份文件:
crow@opsbox:~/work$ grep -E '^db-2026-(06|07)-[0-9]{2}\.sql$' file-names.txt
db-2026-06-28.sql
db-2026-06-30.sql
db-2026-07-01.sql
(06|07):表示匹配06或07;|:在正则中通常表示“或”。

