作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
在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 file
-
pattern
是要搜索的文本模式,可以是普通文本或正则表达式。 -
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.txt
4.使用正则表达式搜索包含 ^[0-9]
开头的行(以数字开头的行):
grep '^[0-9]' file.txt
5.递归搜索多个模式:
grep -rE 'pattern1|pattern2' directory
6.搜索对象的上下文:
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 //用于过滤及时日志,来分析业务情况
关注微信公众号《运维小路》获取更多内容。