linux命令学习-grep命令的使用

grep命令的用途以及优势

grep命令是一个强大且灵活的命令行工具,主要用于在文件中搜索文本字符串,并输出包含这些字符串的行。

  1. 文本搜索:grep最基本的用途是搜索特定的字符串或正则表达式(regex)。它可以快速在大量文件或数据中找到匹配的行。
  2. 高效性:grep是一个非常高效的工具,即使处理大文件也能迅速返回结果。相比手动查找,它可以节省大量时间。
  3. 支持正则表达式:grep支持正则表达式,这意味着你可以使用复杂的模式进行搜索,而不仅仅是简单的文本字符串。正则表达式使得grep非常强大,能够匹配多种复杂的文本模式。
  4. 多文件多字符串搜索:grep可以同时搜索多个文件,甚至可以递归搜索目录中的所有文件。这样在处理大型项目时非常有用。并且还可以同时搜索多个字符串
  5. 上下文显示:grep可以显示匹配行的上下文(例如,前几行和后几行),这对于理解匹配内容在文件中的位置和含义非常有帮助。使用选项如-C、-B、-A等可以实现这一点。
  6. 多平台支持:grep是一个跨平台工具,几乎在所有的Unix/Linux系统以及Windows(通过Cygwin或Git Bash等环境)上都可以使用。
  7. 结合其他命令使用:grep可以与其他命令结合使用,通过管道(|)将其他命令的输出传递给grep进行过滤。例如,ps aux | grep apache可以过滤出所有与apache相关的进程。
  8. 排除匹配:grep不仅可以用于查找匹配的行,还可以用-v选项来排除匹配的行,这在需要排除某些特定内容时非常有用。
  9. 统计功能:使用-c选项,grep可以统计匹配的行数。使用-o选项,可以只输出匹配的部分,并使用管道和wc -l组合统计匹配次数。
  10. 颜色高亮:通过–color=auto选项,可以使grep在输出中高亮显示匹配的文本,便于快速定位。
    grep命令在文本处理、日志分析、代码查找等方面极其有用,是每个开发者和系统管理员都应该掌握的基本工具之一。

grep命令的使用

命令的格式

grep [选项] pattern filename

文件准备

文件名为:application.log

2023-10-01 12:00:00 INFO  Starting application
2023-10-01 12:00:01 DEBUG Initializing database connection
2023-10-01 12:00:02 INFO  Database connection established
2023-10-01 12:00:03 WARN  Configuration file not found, using defaults
2023-10-01 12:00:04 ERROR Failed to load user settings
2023-10-01 12:00:05 INFO  Application running
2023-10-01 12:00:10 DEBUG Processing user request
2023-10-01 12:00:11 INFO  User request processed successfully
2023-10-01 12:00:12 ERROR Failed to process payment
2023-10-01 12:00:13 WARN  Payment gateway timeout, retrying
2023-10-01 12:00:14 INFO  Payment processed on retry
2023-10-01 12:00:20 DEBUG Closing database connection
2023-10-01 12:00:21 INFO  Database connection closed
2023-10-01 12:00:22 INFO  Shutting down application
2023-10-01 12:00:23 DEBUG Application shutdown complete

使用实例

查找ERROR字符串
cat application.log | grep ERROR

#或者

grep ERROR application.log

#或者

grep "ERROR" application.log #在搜索的pattern中间没有空格等符号之前,有没有引号是等价的。如果搜索的是ERROR 1则必须加引号
忽略大小写
cat application.log | grep -i error

#或者

grep -i Error application.log

#或者

grep -i "ErROr" application.log #在搜索的pattern中间没有空格等符号之前,有没有引号是等价的。如果搜索的是ERROR 1则必须加引号
查找多个字符串ERROR和WARN
cat application.log | grep -Ei "error|warn"

#或者

grep -Ei "warn|error" application.log
查询除了INFO之外的行
cat application.log | grep -vi info

#或者

grep -vi info application.log

#或者

grep -vi "info" application.log #在搜索的pattern中间没有空格等符号之前,有没有引号是等价的。如果搜索的是ERROR 1则必须加引号
精确匹配
grep "\<on\>" application.log #只会搜索on字符串

grep "on" application.log #会将含有on的字符串一起筛选出来
只显示匹配到的字符串部分
cat application.log  | grep -oi info 

#或者

grep -oi info application.log

#或者

grep -oi "info" application.log #在搜索的pattern中间没有空格等符号之前,有没有引号是等价的。如果搜索的是ERROR 1则必须加引号



筛选多个字符串并且计数【不能和排除匹配-v一起使用】

不能和排除匹配-v一起使用,因为排除模式只是排除对应字符串的行,并不能统计其他类别的数目,所以这两个选项是不能一起用的。

# 筛选多个字符串并且统计个数
grep -Eio "info|warn|error" application.log | wc -l
grep -Eioc "info|warn|error" application.log
# 各个分类的个数, -c就是count的意思,计数
grep -Eio "info|warn|error" application.log | sort | uniq -c
显示之前和之后的行数
#展示error字符串所在行前后1行的行
cat application.log  | grep -C 1 ERROR

grep -C 1 ERROR application.log

grep -C 1 "ERROR" application.log
递归搜索

可以将-r开关与grep一起使用,以递归方式搜索目录及其子目录中的所有文件,以查找指定的模式。

grep -r pattern /directory/to/search #命令格式

grep -r "ERROR" ./
使用正则表达式
grep "y$" application.log #筛选除y结尾的行,正则表达式的语法需要另外去学习

其他参考:https://cloud.tencent.com/developer/article/1554542

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAO&asuna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值