多个后缀类型筛选文件
- 前言
- 解决方法
- 使用 `grep -E` 和扩展正则表达式
- 使用 `bash` 的扩展模式(extglob)
- 具体解释
前言
根据文件的后缀进行筛选,如下:
有.rc 、.sql、.txt 三种后缀文件,
如何筛选出:.sql 和 .txt 后缀的文件.
[root@localhost 20240620]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 20 12:24 a.rc
-rw-r--r--. 1 root root 0 Jun 20 12:24 a.sql
-rw-r--r--. 1 root root 0 Jun 20 12:24 a.txt
[root@localhost 20240620]#
解决方法
这里详细解释一下使用 grep -E 和 bash 的扩展模式(extglob)的两种方法,包括示例。
使用 grep -E 和扩展正则表达式
grep -E 允许使用扩展正则表达式(ERE),它比基本正则表达式更强大。
步骤:
-
列出目录中的所有文件:
- 使用
ls列出当前目录的所有文件,并将结果传递给grep。
- 使用
-
使用
grep -E过滤文件:grep -E 'a\.(sql|txt)$'使用扩展正则表达式来匹配以.sql或.txt结尾的文件。a\.(sql|txt)$中:a\.匹配以a.开头的字符串。(sql|txt)匹配sql或txt。$表示行尾,确保匹配的是文件后缀。
示例:
假设目录中有以下文件:
a.sql
a.txt
a.t
b.sql
b.txt
运行以下命令:
ls | grep -E 'a\.(sql|txt)$'
输出:
a.sql
a.txt
使用 bash 的扩展模式(extglob)
bash 的扩展模式(extglob)提供了一种简便的方法来匹配多个模式。需要先启用扩展模式,然后使用 ls 列出符合条件的文件。
步骤:
-
启用扩展模式:
- 使用
shopt -s extglob启用bash的扩展模式。
- 使用
-
使用扩展模式匹配文件:
ls a.@(sql|txt)中:@(pattern-list)匹配括号中的任意一个模式。a.@(sql|txt)匹配a.sql或a.txt。
示例:
假设目录中有以下文件:
a.sql
a.txt
a.t
b.sql
b.txt
运行以下命令:
shopt -s extglob
ls a.@(sql|txt)
输出:
a.sql
a.txt
具体解释
使用 grep -E:
ls | grep -E 'a\.(sql|txt)$'
-
ls列出当前目录的所有文件:a.sql a.txt a.t b.sql b.txt -
grep -E 'a\.(sql|txt)$'过滤并匹配以.sql或.txt结尾的文件:a\.匹配文件名以a.开头。(sql|txt)匹配文件后缀为sql或txt。$确保匹配行尾,完整匹配文件名。
输出结果:
a.sql
a.txt
使用 bash 扩展模式:
shopt -s extglob
ls a.@(sql|txt)
-
shopt -s extglob启用bash的扩展模式。 -
ls a.@(sql|txt)使用扩展模式匹配:a.匹配文件名以a.开头。@(sql|txt)匹配文件后缀为sql或txt。
输出结果:
a.sql
a.txt
这两种方法都可以有效地筛选出 a.sql 和 a.txt 文件,各有优势,取决于你习惯使用的工具和命令组合。