
在Windows里面搜索一般是基于文件名字的搜索,但是在Linux里面搜索主要分两种,一种是以文件&目录为搜索为目的的搜索,主要涉及到的命令是find和locate。另外一种是以文件里面的内容为目的的搜索,涉及到的命令就是grep和egrep
主要从以下两个方面来介绍:
1.文件搜索
2.内容搜索(本章节)
grep 是一个强大的命令行工具,用于在文件中搜索指定的文本模式。它的名字来源于 Unix 系统中的一个原始命令 "globally search a regular expression and print",它可以处理文本文件、输入流以及其他命令的输出。
egrep 是 grep 命令的一个变种,通常在许多 Unix系统上也可以用 grep -E 来代替。它与普通的 grep 命令有所不同,主要在于支持扩展的正则表达式语法。
grep pattern filepattern 是要搜索的文本模式,可以是普通文本或正则表达式。file 是要搜索的文件名。-i:忽略大小写grep -i pattern file这将忽略大小写,不区分大小写的搜索匹配模式。
-r 或 --recursive:递归搜索子目录grep -r pattern directory这将在指定目录及其子目录中递归搜索匹配模式。
-n:显示行号grep -n pattern file这会显示匹配模式的行号。
-v:反向匹配grep -v pattern file这会显示不包含匹配模式的行。
-E:支持扩展正则表达式grep -E 'pattern1|pattern2' file这允许使用扩展正则表达式进行多模式搜索。
-o:仅显示匹配的文本grep -o pattern file这会仅显示匹配模式的部分文本内容。
-l:仅显示包含匹配的文件名grep -l pattern *这会列出包含匹配模式的文件名,而不是具体的匹配行。
1.搜索文件中包含单词"example"的行:
grep example file.txt 2.在当前目录及其子目录中搜索包含 "error" 的文件:
grep -r error .3.搜索文件中不包含 "warning" 的行:
grep -v warning file.txt4.使用正则表达式搜索包含 ^[0-9] 开头的行(以数字开头的行):
grep '^[0-9]' file.txt5.递归搜索多个模式:
grep -rE 'pattern1|pattern2' directory6.搜索对象的上下文:
grep -A5 examplie file.text //匹配examplie及后5行,包括自己
grep -B5 examplie file.text //匹配examplie及前5行,包括自己
grep -C5 examplie file.text //匹配examplie上下5行,包括自己在日常运维中,grep也是我们最常用的命令之一,不仅可以用于文本搜索,也可以用于其他搜索,包括进程,端口等,用于接收管道后的过滤。
grep最重要的使用方法就是作为管道"|"的输出来进行过滤。
ps -ef |grep xxx //查看xxx进程是否存在
netstat -lnp |grep xxx //查看xxx端口是否监听
cat xxx.txt | grep xxx //通过管道来过滤,但是对应大文件要慎重
tail -f xxx.txt |grep xxx //用于过滤及时日志,来分析业务情况