Linux 常用命令——grep

628 阅读3分钟

grep ,全称Global Regular Expression Print(示全局正则表达式打印)。

grep 可以配合正则表达式来实现全文搜索,是linux 比较好用的文本处理工具。

grep 系列有三个:

  • grep : 支持基本正则表达式
  • egrep : 支持拓展正则表达式,相当于grep -E
  • fgrep : 不支持正则表达式,只能匹配写死的字符串,但是很快(fast grep)

grep 的常用命令:

参数 解释
-i 在搜索的时候忽略大小写
--color 匹配高亮显示
-n 显示匹配所在的行号
-w 匹配整个单词
-v 输出不带关键字的行,反向匹配
-Ax 输出包含匹配结果的后x 行,A : after
-Bx 输出包含匹配结果的前x 行,B : Before
-Cx 输出包含匹配结果的前后x 行,C : context
-c 输出匹配到的行数(ps: 不是次数)
-o 只显示匹配到的字符串,不显示整行,每个字符串单独展示

示例:

先找一个常见的服务日志文件abs-biz.log.2019.12.08.20,我想看看有没有报错

abs-biz.log.2019.12.08.20

  1. 匹配字符串
[root@iZ2zehgy4d4j4b9gsubksiZ liuxueService]# grep "ERROR" abs-biz.log.2019.12.08.20

[2019-12-08 20:48:16.703][abs][ERROR][druid.sql.Statement.statementLogError:149][495efa23fef6fb880][] - {conn-10013, pstmt-22738} execute error. insert into attention (`school_name`, `profession`, `score`)
[2019-12-08 20:48:16.835][abs][ERROR][c.c.c.web.resolver.ApiExceptionResolver.logError:128][495efa23fef6fb880][] - Resolving exception:
[2019-12-08 20:48:58.163][abs][ERROR][druid.sql.Statement.statementLogError:149][4a71a26bb12d20660][] - {conn-10013, pstmt-22768} execute error. insert into attention (`school_name`, `profession`, `score`)
[2019-12-08 20:48:58.167][abs][ERROR][c.c.c.web.resolver.ApiExceptionResolver.logError:128][4a71a26bb12d20660][] - Resolving exception:
  1. 找出"ERROR" 的日志,忽略大小写
[root@iZ2zehgy4d4j4b9gsubksiZ liuxueService]# grep -i "ERROR" abs-biz.log.2019.12.08.20

[2019-12-08 20:47:29.869][abs][INFO][c.c.a.i.TokenValidateInterceptor.preHandle:79][99145c82ad73bc349][MRvVsXDof312kHA-t8ApjA890sNe0rWiazjP0u7ES_8] - 获取token失败, error=[20002]登录过期
[2019-12-08 20:47:29.988][abs][INFO][c.c.a.i.TokenValidateInterceptor.preHandle:79][08f9b1d10838b6331][MRvVsXDof312kHA-t8ApjA890sNe0rWiazjP0u7ES_8] - 获取token失败, error=[20002]登录过期
[2019-12-08 20:47:29.988][abs][INFO][c.c.a.i.TokenValidateInterceptor.preHandle:79][2bc1cda1bc2d00143][MRvVsXDof312kHA-t8ApjA890sNe0rWiazjP0u7ES_8] - 获取token失败, error=[20002]登录过期
[2019-12-08 20:47:30.019][abs][INFO][c.c.a.i.TokenValidateInterceptor.preHandle:79][7ab2cba9e3e811c9b][MRvVsXDof312kHA-t8ApjA890sNe0rWiazjP0u7ES_8] - 获取token失败, error=[20002]登录过期
[2019-12-08 20:48:16.703][abs][ERROR][druid.sql.Statement.statementLogError:149][495efa23fef6fb880][] - {conn-10013, pstmt-22738} execute error. insert into attention (`school_name`, `profession`, `score`)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
[2019-12-08 20:48:16.835][abs][ERROR][c.c.c.web.resolver.ApiExceptionResolver.logError:128][495efa23fef6fb880][] - Resolving exception:
### Error updating database.  Cause: java.sql.SQLException: Field 'user_id' doesn't have a default value
### The error may involve com.canyun.abs.dao.liuxue.AttentionDao.save-Inline
### The error occurred while setting parameters
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246)
[2019-12-08 20:48:58.163][abs][ERROR][druid.sql.Statement.statementLogError:149][4a71a26bb12d20660][] - {conn-10013, pstmt-22768} execute error. insert into attention (`school_name`, `profession`, `score`)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
[2019-12-08 20:48:58.167][abs][ERROR][c.c.c.web.resolver.ApiExceptionResolver.logError:128][4a71a26bb12d20660][] - Resolving exception:
### Error updating database.  Cause: java.sql.SQLException: Field 'user_id' doesn't have a default value
### The error may involve com.canyun.abs.dao.liuxue.AttentionDao.save-Inline
### The error occurred while setting parameters
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246)
  1. 找到"ERROR" 日志,并输出后10 行
[root@iZ2zehgy4d4j4b9gsubksiZ liuxueService]# grep -A10 "ERROR" abs-biz.log.2019.12.08.20
[2019-12-08 20:48:58.167][abs][ERROR][c.c.c.web.resolver.ApiExceptionResolver.logError:128][4a71a26bb12d20660][] - Resolving exception:
java.lang.Exception:
### Error updating database.  Cause: java.sql.SQLException: Field 'user_id' doesn't have a default value
### The error may involve com.canyun.abs.dao.liuxue.AttentionDao.save-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO attention          ( `school_name`,                                           `profession`,                                           `score` )           values( ?,                                           ?,                                           ? )
### Cause: java.sql.SQLException: Field 'user_id' doesn't have a default value
; Field 'user_id' doesn't have a default value; nested exception is java.sql.SQLException: Field 'user_id' doesn't have a default value
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
...