1、grep
Global Regular Expression Print Shell 中用于按字符串/正则表达式筛选文本行,可直接读文件,也可接收管道标准输入,是日志排查、配置过滤最常用命令。
2、基础格式
grep [选项] '匹配规则' 文件名检索文件
3、选项
-i 忽略大小写
-n 输出行号
-v 反向匹配,输出不满足条件的行
-c 只统计匹配行数
-o 只打印匹配到的字符,不打印整行
-r 递归遍历目录所有文件搜索
-w 完整单词精确匹配,不匹配子串
-A n 匹配行后追加n行
-B n 匹配行前追加n行
-C n 前后各显示n行
4、示例
(1)基础文件搜索
grep -in 'error' app.log
(2)反向过滤
grep -v '^#' /etc/profile | grep -v '^$'
(3)管道搭配系统命令(日常最多)
ps -ef | grep java | grep -v grep查找java进程,排除grep自身进程
ss -lntp | grep 80查看80端口占用
ip addr | grep inet查看网卡IP地址
(4) 递归全局查找文件内容
grep -rn 'mysql' /etc在/etc下递归搜索mysql,显示文件+行号
(5)正则表达式用法
grep '^http' url.txt ^ 开头:匹配以http开头行
grep 'jpg$' list.txt $ 结尾:匹配以jpg结尾行
grep '[0-9]' test.txt 匹配数字
(6)上下文查看日志
grep -C 3 'Exception' app.log 找到exception行,前后各打印3行
5、使用注意事项
(1)正则符号、特殊字符用单引号 ' ^abc$ ',不会被Shell解析;需要解析变量用双引号 "$LOG_KEY"
(2)-r 递归不追踪软链接 ; -R 递归跟随软链接,可能循环死链
(3)永久高亮 echo "alias grep='grep --color=auto'" >> ~/.bashrc
source ~/.bashrc