Linux grep命令详解(多图、多示例)

文章目录

  • grep基本说明
  • grep参数
  • 简单示例列举参数
    • -v(反选)
    • -r -l -H -i(目录子目录、只打印匹配文件、输出文件名、忽略大小写)
    • -c -n -o(匹配次数、输出行号、只打印匹配)
    • -A -B -C(前后行)
  • 正则表达式
    • 基本正则表达式与扩展正则表达式
  • grep示例
  • 附录:正则表达式
    • 基本字符
    • 特殊字符
    • Perl模式正则

grep基本说明

grep是grep、awk、sed这三剑客中最常用的命令了,相对也简单一些。

灵活应用grep能帮我们省很多事,例如很多日志可以直接在服务器查看了,就不用再单独下载下来。

很多日志文件很大,下载慢,文本文件打开也非常慢。所以我们尽量通过grep、awk、sed这三剑客直接在服务器上查看处理了。

grep的基本结构如下:

grep [选项] 匹配模式 file1 file2…

最好的grep文档:

man grep

grep参数

参数说明
-c只统计匹配的行数
-v反选,排除匹配结果
-n显示匹配行与行号
-i不区分大小写
-o只输出匹配的内容
-r递归匹配
-w只匹配单词
-x匹配整行
-l小写L,只输出文件名,不输出匹配内容
-H匹配内容带上文件名
-An匹配内容的后n行也输出
-Bn匹配内容的前n行也输出
-Cn匹配内容的前后n行也输出
-E使用扩展正则表达式,痛egrep
-F不使用正则表达式,同fgrep
-P使用perl模式正则表达式,和我们平常常用的正则最像
-color=auto为grep过滤结果添加颜色

简单示例列举参数

-v(反选)

-v参数是反选,最常用的就是在ps -ef | grep xxx的时候会把grep本身也打印出来,这时就可以用-v参数过滤掉grep

ps -ef | grep java | grep -v grep

Linux grep 反选

-r -l -H -i(目录子目录、只打印匹配文件、输出文件名、忽略大小写)

Liinux grep 忽略大小写

-c -n -o(匹配次数、输出行号、只打印匹配)

Linux grep 统计匹配次数

-A -B -C(前后行)

-A:after 后几行
-B:before前几行
-C:前后几行

Linux grep 打印前后行

正则表达式

要想解锁grep的完全形态,正则表达式肯定少不了。

基本正则表达式与扩展正则表达式

首先我们要区分2个概念,不然容易混乱:

  1. 基本正则表达式(BRE):grep模式
  2. 扩展正则表达式(ERE):grep -E、egrep模式

基本正则表达式(BRE)支持元字符:

  1. .:匹配任意1个字符
  2. *:匹配前1个字符0次或多次
  3. ^:行开头
  4. $:行结尾
  5. []:可选,如[az]匹配字符a或z
  6. -:区间,如[a-z]匹配字符a到z
  7. [^]:反选,如[^0-9]匹配非数字

扩展正则表达式(ERE)基本上和我们平常使用的正则表达式支持的元字符一样。

有一个反直觉的点:

ERE(egrep)中使用反斜杠转义表示普通字符,例如,要匹配?就得使用?
BRE(grep)中使用? 反而变成了正则表达式

之所以有这种情况,是因为grep在识别到?自动转为了egrep模式。

测试文件内容:

ab a. c? [ee] (dd) a* +a+ a|b
11 33 abc22
hello world Luck day
luck boy
44:22:33
long loong looong loop lo?ng
# grep 匹配字符串lo?ng
grep lo?ng grep.txt
# grep 匹配字符串lo?ng
grep "lo?ng" grep.txt# grep 双引号中\?是转义字符,变成正则符号了
grep "lo\?ng" grep.txt# 正则匹配
egrep lo?ng grep.txt
# 正则匹配
egrep lo\?ng grep.txt# egrep 双引号\?被转义,变成普通字符匹配了
egrep "lo\?ng" grep.txt

上面的双引号换成单引号也可以,在引号中\表示转义。

Linux grep egrep

是不是有点乱,所以,为了避免混淆,建议正则直接使用egrep吧。

grep示例

# 查找日志文件中error和warn日志,及其前后5行,忽略大小写
egrep -C5 -i "error|warn" app.log# 统计指定时间段的访问数量
egrep "2024-11-01 06(:[0-9]{2}){2}" access.log | wc -l# 打印8点到10点的日志,根本不用计算时间不要显然思维误区
grep -P '2024-11-01 (08|09|10):\d{2}' app.log
# 打印7点过8分到10分的日志
egrep '2024-10-13 07:(08|09|10)' app.log# 如果是sed,要输出10点日志就不能只到10,因为结束用的是第1个匹配
# sed有一个问题就是 如果灭有匹配到2024-11-01 11:00,就直接干到最后去了
sed -n '/2024-11-01 08:00/,/2024-11-01 11:00/p' app.log
sed -n '/2024-10-13 07:08/,/2024-10-13 07:11/p' app.log# 打印连接的本地ip和远程ip
ss | grep -Po '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
# 打印连接本地ip端口及其对应远程ip端口
ss | grep -Po '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+'

Linux grep 过滤ip

附录:正则表达式

基本字符

元字符含义
.匹配除换行符以外的任何单个字符
^锚定到字符串的开始位置
$锚定到字符串的结束位置
*前面的字符匹配零次或多次
+前面的字符匹配一次或多次
{n}前面的字符恰好匹配 n 次
{n,}前面的字符至少匹配 n 次
{,m}前面的字符最多匹配 m 次
{n,m}前面的字符至少匹配 n 次,最多匹配 m 次
?前面的字符匹配零次或一次
()分组,允许将多个字符或表达式组合
[]字符集合,匹配其中的任意一个字符,如[0-9]匹配数字
[^]排除字符集合,匹配不在括号内的任意一个字符,如[^0-9]匹配非数字字符
# 匹配空白字符
egrep [ \t\n\r\f\v] grep.txt# 匹配非空白字符
egrep [^ \t\n\r\f\v] grep.txt# 匹配变量字符
egrep [a-zA-Z_][a-zA-Z0-9_]* grep.txt

特殊字符

表达式含义
[:alnum:]大小写字母数字[a-zA-Z0-9]
[:lower:]小写字母[a-z]
[:upper]大写字母
[:alpha:]大小写字母[a-zA-Z]
[:blank:]space(空格)、tab
[:cntrl:]控制键CR、LF等
[:digit:]数字[0-9]
[:graph:]非空格键[^:blank:]
[:print:]可打印字符
[:punct:]标点符号[:";?!'#$^&*()等]
[:space:]空白字符,Tab space CR等
[:xdigit:]16进制数

[:space:]包含:

  1. ‌空格(Space):普通的空格字符
  2. ‌制表符(Tab):表示一个制表位
  3. ‌换行符(NL,New Line):表示文本的一行结束
  4. ‌回车符(CR,Carriage Return):在Windows系统中,回车符表示一行的结束
  5. ‌垂直制表符(VT,Vertical Tab):用于垂直对齐文本
  6. ‌换页符(FF,Form Feed):用于分页
# grep egrep都支持,匹配数字
egrep [[:digit:]] grep.txt
grep [[:digit:]] grep.txt

Perl模式正则

Perl模式更偏向于我们熟悉的模式,更简介一些,除了支持基本字符,还支持下面这些表达式:

表达式描述
\d匹配一个数字的字符,[0-9]
\D非数字,[^0-9]
\w英文字母、数字、下划线,[a-zA-Z0-9_]
\W[^a-zA-Z0-9_]
\s[\n\t\r\f空格]
\S[^\n\t\r\f空格]
\b匹配以英文字母,数字为边界的字符串
\B匹配不以英文字母,数值为边界的字符串
# 匹配数字就不需要使用[[:digit:]]这种了,直接\d就可以
# 注意有\转义,需要用引号包起来
grep -P "\d" grep.txt
grep -P '\d' grep.txt# 提取日志时间
grep -oP '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' app.log

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6303.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop---MapReduce(3)

MapTask工作机制 (1)Read阶段:MapTask通过InputFormat获得的RecordReader,从输入InputSplit中解析出一个个key/value。 (2)Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理&…

UI界面设计入门:打造卓越用户体验

互联网的迅猛发展催生了众多相关职业,其中UI界面设计师成为互联网行业的关键角色之一。UI界面设计无处不在,影响着网站、应用程序以及其他数字平台上的按钮、菜单布局、色彩搭配和字体排版等。UI设计不仅仅是字体、色彩和导航栏的组合,它的意…

jmeter基础01-3_环境准备-Linux系统安装jdk

Step1. 查看系统类型 打开终端,命令行输入uname -a,显示所有系统信息,包括内核名称、主机名、内核版本等。 如果输出是x86_64,则系统为64位。如果输出是i686 或i386,则系统为32位。 Step2. 官网下载安装包 https://www…

2024年海淀区中小学生信息学竞赛校级预选赛试题与解析(第二部分程序阅读题(1-4))

第一题代码&#xff1a; #include<bits/stdc.h> using namespace std; int n, cnt;int main() {cin >> n; // 读取输入的整数 nfor (int i 1; i < n; i) // 从 1 到 n-1 的整数进行遍历if (n % i 0) // 如果 i 是 n 的约数cnt; …

ELK日志

一&#xff0c;Elastic Stack 在企业的常用架构 1&#xff0c;没有日志收集系统运维工作的日常"痛点"概述 如上图所示&#xff0c;简单画了一下互联网常用的一些技术栈相关架构图&#xff0c;请问如果让你对上图中的各组件日志进行收集&#xff0c;分析&#xff0c;存…

SAP RFC 用户安全授权

一、SAP 通讯用户 对于RFC接口的用户&#xff0c;使用五种用户类型之一的“通讯”类型&#xff0c;这种类型的用户没有登陆SAPGUI的权限。 二、对调用的RFC授权 在通讯用户内部&#xff0c;权限对象&#xff1a;S_RFC中&#xff0c;限制进一步可以调用的RFC函数授权&#xff…

文件操作:Xml转Excel

1 添加依赖 Spire.Xls.jar <dependency><groupId>e-iceblue</groupId><artifactId>spire.xls</artifactId><version>5.3.3</version></dependency>2 代码使用 package cctd.controller;import com.spire.xls.FileFormat; im…

【FL0014】基于SpringBoot和微信小程序的个人健康管理系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

数据库_SQLite3

下载 1、更新软件源&#xff1a; sudo apt-get update 2、下载SQLite3&#xff1a; sudo apt-get install sqlite3 3、验证&#xff1a; sqlite3启动数据库&#xff0c;出现以下界面代表运行正常。输入 .exit 可以退出数据库 4、安装sqlite3的库 sudo apt-get install l…

鸿蒙进阶-List组件

hello大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来讲讲常用的List组件&#xff0c;也就是列表组件。 List组件 List 组件的基本用法&#xff0c;可以用它来展示列表&#xff0c;并且实现列表滚动&#xff0c;日常开发的时候还可以用它来实现更为复杂的效果。 …

EDA技术简介

目录 可编程逻辑器件 CPLD/FPGA 基于查找表结构的FPGA 硬件描述语言 EDA软件 EDA技术的 应用领域 电子系统的设计方法 EDA (Electronic Design Automation,电子设计自动化) 以可编程逻辑器件 (Programmable Logic Device,简称PLD)为实现载体、以硬件描述语言 (Hardwar…

【java】实战-力扣题库:有序数组的平方

问题描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 问题分析&#xff1a; 既然给定的是一个 非递减顺序的数组 我们可以使用双指针 &#xff0c; 一个指向左边&#xff0c;一个指向…

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

Jupyter Notebook添加kernel的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Python Matplotlib 如何绘制股票或金融数据图

Python Matplotlib 如何绘制股票或金融数据图 在金融领域&#xff0c;数据可视化是分析市场趋势、股票表现和财务健康的重要工具。Python 的 Matplotlib 库为我们提供了强大的功能来绘制股票和金融数据图。本文将详细介绍如何使用 Matplotlib 绘制这些图表&#xff0c;并且结合…

Chrome离线安装包下载

微软的Bing屏蔽了Chrome的搜索结果&#xff0c;需要通过百度搜索。 或者直接访问Chrome的官网&#xff1a;Google Chrome 网络浏览器 直接下载的是在线安装包&#xff0c;安装需要联网。 如果需要在无法联网的设备上安装Chrome&#xff0c;需要在上面的地址后面加上?standalon…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后&#xff0c;就分别得到了对应的lib库&#xff0c;如下图&#xff1a; 再生成Release后如下图&#xff1a;

masm汇编键盘读取字符串换行输出演示

从键盘输入字符串按回车后换行输出 ASSUME CS:CODE, DS:DATA DATA SEGMENT BUFFER DB 20DB ?DB 20 DUP(0) CRLF DB 0AH, 0DH,$ DATA ENDS CODE SEGMENT …

python爬取m3u8视频(思路到实现全讲解!!!)

文章目录 抓取m3u8视频1、思路分析2、实现分析index.m3u8 3、代码实现3.1 获取最后一个m3u8的url地址3.2 多线程下载ts文件与视频合并3.3 合并获取上面俩个代码段的代码 4、注意事项4.1 说明4.2 使用代码进行处理4.3 完整代码 5、解密处理 处理m3u8文件中的url问题 抓取m3u8视频…

html语法

网站是指在因特网上根据一定规则&#xff0c;使用html等制作的用于展示特定内容相关的网页集合 网站由很多网页组成&#xff0c;网页是构成网站的基本元素&#xff0c;通常由图片、连接、视频、声音、文字等元素组成&#xff0c;一般用.htm和.html做后缀&#xff0c;又被称为h…