linux如何在日志中查找关键字?

说白了,这两种查找方法各有优劣,看情况选。
直接用vi+正则查找适合快速定位和编辑,去年我们跑的那个项目里,文件只有几百行,用这个方法五分钟就搞定;但文件量一上去,比如几万行的日志,vi卡成狗是大概率事件,用grep配合cat效率高得多,我们那个3 000量级的项目里,grep命令跑完秒出结果。

先说最重要的,vi编辑模式查找的好处是实时反馈,当你看到匹配的关键字高亮出现的时候,其实还能直接修改或跳转,这个点很多人没注意。
另外一点,grep配合cat能利用管道链处理更复杂逻辑,比如去年我们查特定IP的访问记录,用cat access.log | grep '1 9 2 .1 6 8 .1 .1 00'比vi翻来覆去折腾更快。
还有个细节挺关键的,vi查找对特殊字符需要转义,而grep相对简单,这个很多人没注意。

说实话挺坑的,我一开始也以为vi更快,后来发现处理大文件时延迟巨大。
等等,还有个事,vi查找依赖键盘输入,如果光标不在文件开头,每次都得跳来跳去。

建议小文件用vi,大文件用grep,觉得我说的有道理可以试试看。

linux如何在日志中查找关键字

vi/vim快速查日志,简单有效。
grep命令找日志,通配符强大。
单文件用vi/vim,多文件grep胜出。
效率与便捷,根据情况选。
你自己掂量。

如何在Linux中搜索文件内容?使用grep命令快速查找文本内容

grep这玩意儿在Linux里是真方便。
用起来贼简单。

就说最基础的。
你直接敲 grep "error" /var/log/syslog 就行。
这意思就是在syslog文件里找有"error"这俩字的行。

要是想在一个目录下面全找,就用 -r。
比如 grep -r "config_value" /etc/。
这会把/etc/下面所有文件都递归地找一遍,看有没有"config_value"这玩意儿。

常用选项也有不少。
比如 -i 忽略大小写。
你想找"warning"的时候,不管它是"Warning"还是"WARNING"都能找到。
grep -i "warning" my_app.log 就这么用。

显示行号用 -n。
grep -n "failed" system.log 会告诉你哪一行有"failed"。

有时候你想反着找,就用 -v。
比如 grep -v "info" debug.log。
这会把所有不含"info"的行都打出来。

统计行数用 -c。
grep -c "GET/api" access.log 能数出来access.log里有多少行是"GET/api"。

这些选项还能组合着用。
比如 grep -rin "exception" /var/log/app/。
这会递归地找,忽略大小写,还显示行号。

高级选项也能玩。
-E 支持更复杂的正则表达式。
grep -E "error|warning" application.log 能同时匹配"error"或者"warning"。

-P 是Perl兼容的正则。
比如 grep -P "lookahead(?=pattern)" file.txt。
这用上了零宽度断言,贼高级。

-w 只匹配完整单词。
grep -w "user_id" code_base.py。
这能避免像"identity"或者"idea"这种误报。

显示上下文用 -A 或者 -B。
grep -C3 "failed_login" auth.log 会显示匹配的行,再往后或者往前各3 行。

文件过滤也能用。
--exclude=".bak" 会排除所有.bak文件。
--include=".log" 就只看.log文件。
--exclude-dir=".git" 能把.git目录给过滤掉。

grep -r "TODO" --exclude-dir=".git" --exclude=".swp" 这就能排除特定文件和目录,再递归找"TODO"。

还能跟其他命令配合着用。
find . -name ".log" -mtime -1 -exec grep "critical error" {} +。
这会先找2 4 小时内改过的.log文件,再在上面找"critical error"。

管道也很常用。
比如 grep "WARNING" application.log | awk '{print $1 }' 能把日志里的时间戳给提取出来。

统计IP出现次数就更好玩了。
grep "Failed login from" auth.log | awk '{print $NF}' | sort | uniq -c。
这能数出每个IP登录失败的次数。

要是结果太多看不过,用 less 或者 more 分页看。
grep -r "some_pattern" /var/log/ | less 就行。

用处也贼广。
日志分析、代码审查、配置管理、安全审计都能用。

反正grep这玩意儿真香。

linux日志查询常用命令

结论:Linux日志查询,用grep找模式,tail看末尾,head看开头,awk抽字段,sed改文本,journalctl管systemd日志。