探索目录结构并使用正则表达式进行文件筛选
在命令行中,我们常常需要查找、筛选文件。其中,find
命令是一个强大的工具,它允许我们根据各种条件来定位文件。
find dir -regextype type -regex "pattern"
这里,dir
是起始搜索的目录,-regextype
选项用于指定正则表达式的类型,而 -regex
后面跟的是具体的正则表达式模式。
参数解释:
dir:起始搜索的目录。
-regextype "type":选择使用的正则表达式类型,如 posix-awk、posix-basic、posix-egrep 和 posix-extended 等。常用的是后两种。
pattern:在 find
命令中使用正则表达式时,需要用 -regex "pattern"
选项,其中 pattern
应使用相应类型风格的正则表达式。
注意:find
的 -name
选项不支持正则表达式,仅支持通配符如 、? 和 []。
[abc]:表示匹配包含 abc 中任意一个字符的字符串。
[^abc]:表示匹配不包含 abc 的字符串,其中 ^ 表示取反。
例如:
find . -regextype posix-extended -regex ".\.[^oa]>"
此命令用于匹配不以 .a 或 .o 结尾的文件名。
grep
命令是一个强大的文本搜索工具,它允许用户根据正则表达式搜索文本。
选项解释:
-e, --regexp=PATTERN:使用 PATTERN 进行匹配。
-r, --recursive:递归搜索。
-n, --line-number:输出带有行号的行。
-w, --word-regexp:强制 PATTERN 匹配整个单词。
-i, --ignore-case:忽略大小写区别。
接下来是一个 find
命令的脚本示例,名为 cgrep.sh
(1) 新建 cgrep.sh 脚本文件:
!/bin/sh
cgrep.sh - 一个用于递归搜索文件的脚本
dir=$(pwd) 当前目录作为默认搜索路径
if [ $ -eq 2 ]; then 如果传入两个参数,则第二个作为搜索路径
dir=$2
fi ...(此处省略中间部分代码)...
设置别名 cgrep 的方法(2)和(3)略过具体实现,聚焦于命令行使用说明。
(2) 设置别名 cgrep:
在终端中执行以下命令以设置别名:
alias cgrep='路径/cgrep.sh' 将 '路径/' 替换为 cgrep.sh 脚本的实际路径。
source ~/.bashrc 使别名立即生效。
(3) 使用 cgrep 命令搜索字符串:
$ cgrep "xxx" "搜索路径"
在命令行中输入此命令即可在指定路径下递归搜索包含 "xxx" 的文件内容。