面试官:
在 Linux 中,如何查找指定目录或文件?如果我要查找某种后缀名的文件呢?
应聘者回答参考:
可以使用 find
命令:
-
按文件名查找:
find 路径 -name 1.txt
-
查找指定后缀名文件:
find 路径 -name "*.log"
find
会在指定目录及其子目录中递归搜索文件,支持通配符,非常适合批量查找。
面试官:
那如果我想在文件中定位关键字,甚至统计某个字符串出现的次数,应该怎么做?
应聘者回答参考:
可以使用 grep
和 wc
命令:
-
在目录下递归查找关键字:
grep -r "{关键字}" {路径}
-
统计某个字符串在文件中的出现次数:
grep -o targetStr filename | wc -l
grep
常见参数说明:
-a
/--text
:不忽略二进制数据。-A N
:显示匹配行及其后 N 行。-B N
:显示匹配行及其前 N 行。-C N
:显示匹配行及前后 N 行上下文。-c
:只显示匹配的行数。-e pattern
:指定匹配模式。-E
:使用扩展正则表达式。-F
:固定字符串匹配。-i
:忽略大小写。-n
:显示匹配所在的行号。-o
:只输出匹配的部分。-r
:递归搜索子目录。-v
:显示不匹配的行。-l
:只列出匹配的文件名。-L
:只列出不匹配的文件名。-H
:显示匹配行前加上文件名。
wc
常见参数说明:
-c
:统计字节数。-m
:统计字符数。-w
:统计单词数。-l
:统计行数。-L
:最长行的长度。
示例:
# 在 /data/reports 目录递归查找 "test"
grep -r "test" /data/reports
# 在 dir 目录下,递归查找所有 .cpp 文件中的关键字 key
grep -R --include="*.cpp" key dir
# 在 application 目录递归查找所有 .sh 文件中的关键字 81,显示行号,并写入 /root/t.txt
grep -R -n --include="*.sh" 81 ./application > /root/t.txt
😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。