查找与统计
- grep
- find
- wc
- Examples
grep
grep
命令用于在文件中或者标准输出中搜索特定字符串,并显示匹配结果。
grep
全称:Global Regular Expression Print
基本语法:
grep [OPTION]... PATTERN [FILE] ...
- 默认情况下,PATTERN 是一个基本正则表达式(Basic Regular Expression);
- 配合
|
可以在标准输出中进行字符串检索;
示例1:
grep -i 'hello world' memu.h main.c
#
grep -i 'hello world' *.c
选项
options | Usage |
---|---|
-c | 仅显示特定字符串所在行的行号 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择,仅列出没有特定字符串的行 |
-r | 递归搜索文件目录(terminal 显示路径和搜索到内容) |
-E | 使用拓展的正则表达式 (grep -E = egrep ) |
-l | 仅显示包含特定字符串的文件的名称 |
-C n | 打印匹配行的前后n行 |
-f file | 从 file 中获取 PATTERN 进行匹配 |
基本正则表达式
Expression | Usage |
---|---|
. | 匹配任意单个字符。 |
* | 匹配前一个字符零次或多次 |
[ ] | 匹配括号内的任意一个字符 |
[^ ] | 匹配括号内以外的任意一个字符 |
\ | 转义字符,用于匹配特殊字符) |
^ | 匹配行首 |
& | 匹配行尾 |
I | 或运算符 |
( ) | 分组运算符 |
拓展正则表达式
Expression | Usage |
---|---|
+ | 匹配前一个字符一次或多次 |
? | 匹配前一个字符零次或一次 |
{ } | 匹配前一个字符指定次数 |
示例
① 对多个文件进行检索的时候,会显示文件名和特定字符串所在行的完整内容。
② 遍历当前目录下的所有文件,包含子目录中的文件,并进行搜索。
grep -r 'module' ./*
③ 使用 -f
选项
④ 同时使用多个选项
⑤ 正则表达式的使用
注意使用转义字符。
find
find
命令用于在文件系统中搜索文件和目录,并对找到的项目执行操作。通过文件名查找文件的所在位置,文件名查找支持模糊匹配。
grep
是在文件中找字符串,find
是在目录下找文件或者其他内容。
基本语法:
find [OPTION] [path ...] [expression]
示例:
find ./* -name "*.v"
命令的执行结果示例如下:
该命令用于搜索当前目录下以 v 为后缀的所有文件,它会自动对子目录进行检索,最终输出目标文件的相对路径。
选项
这里的选项可以分为两部分,一个是查找文件的选项,另一个是找到文件之后,对其进行某种操作的选项。
筛选选项:
options | Usage |
---|---|
-name pattern | 根据文件名进行查找,pattern 中支持通配符 * 和 ?。 |
-iname pattern | 根据文件名进行查找,忽略大小写 |
-type type | 根据文件类型进行查找,f 表示文件,d 表示目录,l 表示链接 |
-size n/+n/-n | 根据文件大小进行查找,+n 表示文件大于某个值,比如 10M,-n 表示文件小于某个值,n 则是等于 |
-depth | 先搜索子目录,再搜索当前目录 |
-maxdepth | 搜索的最大深度 |
-perm | 根据全选搜索文件,例如 -perm 755 |
操作选项(放在命令的最后面):
options | Usage |
---|---|
-delete | 找到文件后,将其删除 |
-exec coomand {} \; | 对找到的文件执行命令 |
-ok coomand {} \; | 对找到的文件执行命令,并在执行前提示用户确认 |
示例:
查找 /home 目录下所有大于 10M 的文件:
find /home -size +10M
查找当前目录下所有以 .txt 结尾的文件,并把它们复制到 /backup 目录:
find . -name "*.txt" -exec cp {} /backup \;
查找当前目录下所有以 .log 结尾的文件,并提示用户是否删除它们:
find . -name "*.log" -ok rm {} \;
wc
统计文件或者标准输出的行数、字数(word)或字节(Byte)数。
基本语法
wc [OPTION]... [FILE]...
- 可以同时指定多个文件
- 如果文件名是
-
,或者没有指定文件名称,则wc
会从标准输出中读取数据并统计数量。 - 这里的 word 指的是以空白符为分界的连续的字符串。(A word is non-zero-length sequence of characters delimited by white space.)
wc
默认统计行数、字数和字节数,统计单个文件的结果如下:
14 23 147 依次是行数、字数和字节数。
同时统计多个文件时,最后会有一个统计值。
选项
options | Usage |
---|---|
-l | 统计行数 |
-w | 统计字数 |
-c | 统计字节数 |
-m | 统计字符的数量(character counts) |
-L | 最长行的长度 |
Examples
wc
命令往往是配合其他命令(grep
、|
等)一起使用,具体示例如下。
① 统计某个文件中 Error 的数量:
grep "Error" tk_scan.log | wc -l
② 统计当前目录下文件的数量(不包含子目录)
ls -l | grep "^-" | wc -l
③ 统计当前目录下文件的数量(包含子目录)
ls -lR | grep "^-" | wc -l
④ 查看某目录下文件夹(目录)的个数(包括子目录)
ls -lR | grep "^d" | wc -l
⑤ 统计当前文件夹下某个文件或某种后缀名称的文件的数量
find . -name filename | wc -l
#
find . -name "*.v" | wc -l