有的时候,我们需要在应用日志中搜索关键词前后的的报错信息,但是由于应用的日志很多,我们只想查询关键词第一次或者最后一次出现的地方的前后几行日志,这时,就可以使用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. 【独立开发作品】SlideBrowser 一个轻量的滑动浏览器,给你不一样的交互体验

    产品介绍 SlideBrowser是一个滑动浏览器,当你鼠标移动到屏幕边缘,自动出现,当失焦时自动隐藏. 使用场景 在应用全屏模式下查询资料.问 GPT 等 记录一些待办事项或者笔记 查看股市.币市信 ...

  2. TPC-H 研究和优化尝试

    TPC-H测试提供了8张表,最近做这个测试,记录下过程中的关键点备忘. 1.整体理解TPC-H 8张表 2.建立主外键约束后测试22条SQL 3.分区表改造,确认分区字段 4.重新测试22条SQL 5 ...

  3. MongoDB 复制集机制及原理

    复制集的作用 MongoDB 复制集的主要意义在于实现服务高可用. 它的现实依赖于两个方面的功能: 数据写入时将数据迅速复制到另一个独立节点上 在接受写入的节点发生故障时自动选举出一个新的代替节点 在 ...

  4. nginx 简单实践:负载均衡【nginx 实践系列之四】

    〇.前言 本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考. 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章: https://www.cnblogs.co ...

  5. nodejs目录与文件遍历

    路径相关函数 path.basename('/foo/bar/baz/asdf/quux.html'); // Returns: 'quux.html' path.basename('/foo/bar ...

  6. python tkinker答题工具简易实现

    分享一个简单的python tkinker实现的答题工具,效果参见https://www.bilibili.com/video/BV13e4y1E71d/ 点击查看代码 import tkinter ...

  7. freertos消息队列的值传递和指针传递

    消息队列的使用方法总结: 1.消息队列初始化(定义一个消息队列的结构体),一般在main.c中完成. 2.消息队列的发送:   a extern 消息队列   b 定义一个结构体的指针指向消息消息队列 ...

  8. 基于STM32F4+FREERTOS进行结构体变量的传递

    原始参考链接如下↓ Freertos 接收消息队列数据不对,是姿势不正确吗 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! https://www.armbbs.cn ...

  9. java一个校验对象是否为null的豪华大礼包

    自写的校验所有类型是否为null的工具类, 懒人福音,嘎嘎好用. 1 /** 2 * 一个校验对象是否为null的豪华大礼包 3 * 可以校验:Collection,Map,String,Enumer ...

  10. Ruby+Selenium+testunit web自动化demo

    1.安装对应库 使用RubyMine新建项目打开终端安装对应库 gem install selenium-webdriver gem install test-unit 如果安装不成功,请切换到国内源 ...