有的时候,我们需要在应用日志中搜索关键词前后的的报错信息,但是由于应用的日志很多,我们只想查询关键词第一次或者最后一次出现的地方的前后几行日志,这时,就可以使用grep和管道命令处理了。

  更多关于Linux命令的传送门——《五分钟扫盲:25个工作中常用的Linux命令》。

常用查询

先提供两个常用查询语句,再分析语法。以文件/etc/man.config为例进行举例。

首次出现位置

取出文件中关键词keyword首次出现的前2行:

grep  -A  "keyword" /etc/man.config | head -2

最近一次出现位置

在文件中查找关键词keyword最近出现的前2行记录:

grep  -B  "keyword" /etc/man.config | tail -2

查询关键词所在记录

取出文件/etc/man.config中包含关键词keyword的所有记录:

grep "keyword" /etc/man.config

查询关键词所在位置

  语法:grep [-acinv] [-A/B/C lineNum] [--color=auto] [“keyword”] [fileName]|[head/tail -lineNum]

参数:

-a :将 binary 文件以 text 文件的方式搜寻数据

-c :计算找到关键词keyword 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有keyword内容的那一行!

-A lineNum:A应该是After的意思,输出匹配字符串后多少行,-A3 显示后三行

-B lineNum:B应该是Before的意思,输出匹配字符串前多少行,-B 2 显示前两行

-C lineNum:C应该是Center的意思,输出匹配字符串前后多少行,-C2 显示前后两行

–color=auto :将找到的关键词部分高亮显示

keyword:关键词,即待匹配字符串

fileName:包括文件路径在内的文件名

|:管道命令符,它及其后面的命令可以不用

head/tail:head表示查询关键词首次出现的地方,而tail与之相反。其后的lineNum表示需要打印的行数,语法中前后出现两次lineNum,如果同时出现,依后面的为准。

  功能:文本搜索工具,类似于正则表达式搜索,用于在一个大的文件中快速搜索满足一定规则的内容,查到就将关键词以某种颜色高亮显示。

  说明:grep是Global Regular Expression Print 的缩写,分析一行的信息,若有关键词出没,就将该行打印出来。该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等。

  例1 取出文件/etc/man.config中包含关键词keyword的所有行,记录按照时间升序打印,并把找到的关键字加上颜色高亮显示:

grep --color=auto "keyword" /etc/man.config

此种打印方式用于找出包含关键词的所有行,关键词高亮显示。

例2 取出文件/etc/man.config中关键词keyword所在行及其后1行的所有行,记录按照时间升序打印:

grep -A2 "keyword" /etc/man.config

此种打印方式适用于关键词比较精确、且关键词出现次数比较少的场景。

例3 取出文件/etc/man.config中关键词keyword首次出现的前2行:

grep -B10 "keyword" /etc/man.config | head -2

例4 在文件/etc/man.config中,查找关键词keyword首次出现的后2行记录:

grep -A10 "keyword" /etc/man.config | head -2

检索关键词并把结果写入新文件

搜索关键字出现的位置,并把日志写入另一文件,如果文件存在则覆盖其内容。

语法:grep [-acinv] [-A/B/C n] [--color=auto] [“keyword”] [fileName]|[head/tail -n] > anotherFileName

>命令表示覆盖写入,如果使用>>,则表示追加写入。

例5 (搜索关键字最后一次出现位置的前后M行记录,并写入文件newFile.log,如果文件存在则追加

grep -A 10 "keyword" /etc/man.config >> newFile.log | tail -2

结束语

  《Linux 在多个文件中搜索关键字》将详细阐述如何在当前目录下的多个文件里搜索某个关键词。

  欢迎点赞阅读,一同学习交流;若有疑问,请在文章下方留下你的神评妙论!以促使博文高质量。

Linux grep查询关键词首次或者最近一次出现的地方的更多相关文章

  1. linux grep 查询多行的方法

    linux grep 查询多行的方法 经常查询 git log 中使用的方法, 如下 git log |grep "xxxx" 如果想查询多行的话, 就有些尴尬, 如果想查询多行的 ...

  2. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  3. linux grep命令总结

    风生水起善战者,求之于势,不责于人,故能择人而任势. 博客园    首页    新随笔    联系    订阅    管理 posts - 791,  comments - 394,  trackba ...

  4. linux下查询进程占用的内存方法总结

    linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...

  5. Linux批量查询替换字符串

    Linux 批量查询替换文本文件中的字符串: 1.批量查找某个目下文件的包含的内容,例如: #   grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. #   ...

  6. Linux grep命令详解[备份]

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  7. linux grep命令(linux在文件中搜索内容)

    转自:https://www.cnblogs.com/end/archive/2012/02/21/2360965.html linux grep命令 1.作用Linux系统中grep命令是一种强大的 ...

  8. 几种在Linux下查询外网IP的办法。

    几种在Linux下查询外网IP的办法.   Curl 纯文本格式输出: curl icanhazip.com curl ifconfig.me curl curlmyip.com curl ip.ap ...

  9. Linux下查询一个包是32位还是64位

    Linux下查询一个包是32位还是64位 [root@localhost ~]# rpm -qa  --queryformat %-{name}-%{version}-%{release}-%{arc ...

  10. 如何在 Linux 系统查询机器最近重启时间

    如何在 Linux 系统查询机器最近重启时间 在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到 ...

随机推荐

  1. 记一次.NET内存居高不下排查解决与启示

    前情 我们有个海外的项目,一共70个服务,前前后后花了超过一年时间完成了云服务迁移和架构调整.主要是架构调整了,原来的docker swarm托管服务,新架构改为Kubernetes托管.几台云服务器 ...

  2. 面试题30. 包含min函数的栈

    地址:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/ <?php /** 定义栈的数据结构,请在该类型中实现一 ...

  3. Appflowy cloud 部署测试避坑指南

    在进行 Appflowy cloud 部署测试时,我可谓是踩坑无数.下面,我想从几个关键方面来分享一下我的经验. 先给大家讲讲我的基础情况.Appflowy cloud 的部署是在 docker 环境 ...

  4. C#/.NET/.NET Core优秀项目和框架2025年2月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的详细介绍.功能特点.使用方式以及部分功能 ...

  5. [SWPUCTF 2021 新生赛]ez_unserialize

    概括 这是一道PHP反序列化的CTF赛题,本意是想用这道题对PHP反序列化进行一定的学习. 过程 我们打开赛题,看看内容 没有发现什么东西,看看他的页面代码 根据他的提示,感觉是存在一个robots. ...

  6. 墨者学院SQL注入(MySQL)的总结:

    ​ 我们打开靶机 ​ 在这个界面我们可以看见在密码的下面有一个停机公告,我们点进去,会发现可以发现这个公告是存在id的,又可以会出现漏洞.所以我们尝试着在id=1的后面加上and 1=1 ​ 我们可以 ...

  7. 双剑合璧:kubectx+kubens玩转Kubernetes多集群管理

    在同时管理多个Kubernetes集群和数十个命名空间时,频繁输入--context和--namespace参数堪称效率杀手.由Ahmetb开发的kubectx/kubens工具组,用极简命令实现集群 ...

  8. oracle审计详解

    Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这些权限,但可以提供有用的信息,用于揭示权限的滥用和误用. 下表中总结了Oracle数据库中不同类型的审计. 审 ...

  9. PG的子查询:insert 没有就插入记录,update有则更新记录

    insert into t --进行插入 values(1,'name') ON CONFLICT(id) --如果id这个键存在 do update set --更新以下字段 name=EXCLUD ...

  10. FastAPI 核心安全功能与模板渲染的完整示:登录、CSRF、JWT、会话、认证和缓存功能

    以下是一个整合 FastAPI 核心安全功能与模板渲染的完整示例,基于多个技术文档的最佳实践,包含登录.CSRF.JWT.会话.认证和缓存功能: from datetime import dateti ...