linux运维一天一个shell命令之grep详解
一、概念
grep 是 Linux 和 Unix 系统中一个非常常用的命令行工具,用于搜索文本文件中的特定模式。它支持正则表达式,并能在文件中快速查找匹配的行
二、正则表达式
1.概念
正则表达式(Regular Expressions,简称 regex 或 regexp)是一种用于定义字符串模式的强大工具。它可以用来搜索、编辑或处理文本。正则表达式在许多编程语言和工具(如 Python、JavaScript、Grep、Sed)中得到了广泛应用
2.语法
正则表达式由普通字符(如字母、数字)和特殊字符(元字符)组成,用于匹配字符串模式。
-
普通字符
普通字符包括大多数字母和数字,匹配它们自身。例如,正则表达式 abc 匹配字符串 “abc”。 -
元字符
元字符是具有特殊含义的字符,用于构建复杂的模式。以下是一些常用的元字符:
| 元字符 | 描述 |
|---|---|
| . | 匹配任意单个字符(换行符除外) |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结束 |
| * | 匹配前面的字符零次或多次 |
| + | 匹配前面的字符一次或多次 |
| ? | 匹配前面的字符零次或一次 |
| {n} | 匹配前面的字符恰好 n 次 |
| {n,} | 匹配前面的字符至少 n 次 |
| {n,m} | 匹配前面的字符至少 n 次,至多 m 次 |
| [] | 匹配方括号内的任意字符 |
| () | 分组,组合多个字符成一个单元,并记住匹配的子字符串 |
| \ | 转义字符,用于匹配元字符的字面含义 |
- 字符类
字符类用于匹配一组字符中的任意一个。字符类用方括号表示,例如 [abc] 匹配 “a”、“b” 或 “c”。一些常用的字符类和预定义字符类如下:
| 字符类 | 描述 |
|---|---|
| [abc] | 匹配 “a”、“b” 或 “c” |
| [^abc] | 匹配除 “a”、“b” 和 “c” 之外的任意字符 |
| [a-z] | 匹配任意小写字母 |
| [A-Z] | 匹配任意大写字母 |
| [0-9] | 匹配任意数字 |
| \d | 匹配任意数字(等价于 [0-9]) |
| \D | 匹配任意非数字字符 |
| \w | 匹配任意单词字符(字母、数字或下划线 |
| \W | 匹配任意非单词字符 |
| \s | 匹配任意空白字符(空格、制表符、换行符等) |
| \S | 匹配任意非空白字符 |
3.常见正则表达式示例:
- 匹配ip地址
(\d{1,3}\.){3}\d{1,3} ## -P Perl 兼容正则表达式
root@xxx:~# ifconfig -a |grep -P "(\d{1,3}\.){3}\d{1,3}"inet addr:10.xx.xx.xx Bcast:10.xx.xx.xx Mask:255.255.255.0inet addr:192.168.144.102 Bcast:192.168.144.255 Mask:255.255.255.0inet addr:127.0.0.1 Mask:255.0.0.0
([0-9]{1,3}\.){3}[0-9]{1,3} ## -E 兼容扩展正则
root@xxx:~# ip a s |grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"inet 127.0.0.1/8 scope host loinet 192.168.144.102/24 brd 192.168.144.255 scope global eth1inet 10.xx.xx.xx/24 brd 10.xx.xx.xx scope global bond0
- 匹配电子邮箱
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]
root@xxx:~# cat .gitconfig |grep -P "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
email = xxx@xxx.com
三、grep用法
1.基本用法
1)基本语法:
grep [OPTIONS] PATTERN [FILE...]
- PATTERN:要搜索的正则表达式。
- FILE:要搜索的文件(可以是多个文件)。
2)常见选项
- 匹配选项
-i 或 --ignore-case:忽略大小写。-v 或 --invert-match:反转匹配,只显示不匹配的行。-w 或 --word-regexp:匹配整个单词。-x 或 --line-regexp:匹配整行。
- 输出控制选项
-c 或 --count:只输出匹配的行数。-l 或 --files-with-matches:只输出包含匹配的文件名。-L 或 --files-without-match:只输出不包含匹配的文件名。-n 或 --line-number:在输出中显示匹配行的行号。-H 或 --with-filename:在多文件搜索中显示文件名。-h 或 --no-filename:在多文件搜索中不显示文件名。-o 或 --only-matching:只输出匹配的部分。
- 上下文控制选项
-A NUM 或 --after-context=NUM:显示匹配行后面的 NUM 行。-B NUM 或 --before-context=NUM:显示匹配行前面的 NUM 行。-C NUM 或 --context=NUM:显示匹配行前后各 NUM 行。
- 正则表达式选项
-E 或 --extended-regexp:使用扩展正则表达式。-F 或 --fixed-strings:将 PATTERN 作为固定字符串搜索。-G 或 --basic-regexp:使用基本正则表达式(默认)。-P 或 --perl-regexp:使用 Perl 兼容正则表达式。
- 文件和目录选项
-r 或 -R 或 --recursive:递归搜索目录。--exclude=GLOB:排除匹配 GLOB 模式的文件。--include=GLOB:只搜索匹配 GLOB 模式的文件。--exclude-dir=DIR:排除匹配 DIR 名称的目录。
2.示例
file.txt
community. Learning
Hello World!
This is a simple
example of a text.
Programmers often
start with "hello, World!"
to test their code.
It's a tradition
in the programming
- 基本搜索
root@xxx:~# grep "hello" file.txt
start with "hello, World!"
在 file.txt 中搜索 “hello”。
- 忽略大小写
root@xxx:~# grep -i "hello" file.txt
Hello World!
start with "hello, World!"
在 file.txt 中搜索 “hello”,忽略大小写。
- 反转匹配
root@xxx:~# grep -v "hello" file.txt
Hello World!
This is a simple
example of a text.
Programmers often
to test their code.
It's a tradition
in the programming
显示 file.txt 中不包含 “hello” 的行。
- 显示行号
root@xxx:~# grep -n "hello" file.txt
5:start with "hello, World!"
在搜索结果中显示行号。
- 递归搜索
root@xxx:~# grep -r "pattern" /path/to/directory
递归搜索目录 /path/to/directory 中的所有文件。
- 精确匹配匹配整个单词
root@xxx:~# grep -w "pattern" file.txt
start with "hello, World!"
只匹配整个单词 “pattern”。
- 显示匹配行的上下文
root@xxx:~# grep -C 2 "hello" file.txt
example of a text.
Programmers often
start with "hello, World!"
to test their code.
It's a tradition
显示匹配行以及前后各两行的内容。
- 使用扩展正则表达式
grep -E "pattern1|pattern2" file.txt
使用扩展正则表达式,匹配 “pattern1” 或 “pattern2”。
- 只输出匹配的部分
grep -o "pattern" file.txt
只输出匹配的部分,而不是整行。
- 搜索多个文件
grep "pattern" file1.txt file2.txt
在 file1.txt 和 file2.txt 中搜索 “pattern”。
- 排除特定文件
grep --exclude="*.log" "pattern" /path/to/directory/*
在 /path/to/directory 中搜索 “pattern”,但排除扩展名为 .log 的文件。
- 排除特定目录
grep --exclude-dir="backup" "pattern" /path/to/directory
在 /path/to/directory 中搜索 “pattern”,但排除目录 backup。
相关文章:
linux运维一天一个shell命令之grep详解
一、概念 grep 是 Linux 和 Unix 系统中一个非常常用的命令行工具,用于搜索文本文件中的特定模式。它支持正则表达式,并能在文件中快速查找匹配的行 二、正则表达式 1.概念 正则表达式(Regular Expressions,简称 regex 或 reg…...
COMSOL金属氢化物-放氢过程
在此记录下放氢过程的软件设置思路 1、采用的是"达西定律""层流" 物理场,其中"层流"物理场选择了”弱可压缩流动“,这里主要是选择”可压缩流动“的话,算出来的瞬时流量值跟实测差距太大了。 2、设置"达西…...
(四)软件性能测试
1. 性能测试包含的方法有哪些(至少列举5种)? 正确回答通过率:69.0%[ 详情 ] 推荐指数: ★★★★★ 试题难度: 中级 性能测试大致分为以下六类 1、验收性能测试: 通过模拟生产运行的业务压力量…...
萱仔大模型学习记录5-langchain实战
前面我的bertlora微调已经跑出了不错的结果,我也学会了如何在bert上使用Lora进行微调,我后续会补充一个医疗意图识别的项目于这个系列,现在这个医疗意图识别代码还暂时不准备公开。我就继续按照我的计划学习一番LangChain。 LangChain是一个用…...
安装使用netron
1.安装netron pip install netron2.使用以下命令,然后打开浏览器查看。 netron netron --host 0.0.0.0 --port 6780 netron "model_path" --host 0.0.0.0 --port 67803.在jupyterlab中使用 github有人推荐的方法,jupyterlab部署在本地的可以用…...
JDFrame 一款比 Java 8 Stream 更灵活的数据处理工具
一、JDFrame 介绍 在大数据处理领域,Apache Spark以其强大的分布式计算能力和丰富的数据处理API而广受好评。然而,在许多日常的软件开发场景中,我们面临的数据量可能并不需要Spark这样的分布式系统来处理。相反,我们更希望有一种…...
《Android系统开发中高级定制专栏导读》
《Android系统开发中高级定制专栏导读》 欢迎来到【Android系统开发中高级定制‘】专栏!在这里,将深入探讨Android系统开发与定制的方方面面,涵盖从系统接口定制、权限管理、系统应用配置、驱动入门配置等多个领域。无论你是刚接触Android系…...
LeetCode 114. 二叉树展开为链表
更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 114. 二叉树展开为链表,难度中等。 DFS 解题思路:先用 DFS 遍历二叉树,将树的结果存放在 List 中&am…...
78.子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 :总 // 注释的都为后来思考不必要的 class Solution {List<List<Integer…...
历史标签如何时间迁移?
本文解析的论文是: Lin, C.; Du, P.; Samat, A.; Li, E.; Wang, X.; Xia, J. Automatic Updating of Land Cover Maps in Rapidly Urbanizing Regions by Relational Knowledge Transferring from GlobeLand30. Remote Sens. 2019, 11, 1397. https://doi.org/10.33…...
Jenkins参数化构建
目录 一. 准备ansible 二. Gitlab新建子项目 三. Jenkins建立任务,进行初步配置 四. 导入nginx主机的公钥 五. 配置ansible执行脚本 六. 构建测试 一. 准备ansible 在jenkins主机中安装ansible [rootjenkins ~]# yum install -y epel-release [rootjenkins…...
函数实例讲解(三)
文章目录 常用的三个数学函数1、绝对值函数ABS2、取整数部分INT3、求余数函数MOD 求极值函数max、min1、Max2、Min 附加条件下求平均数1、AVERAGE2、AVERAGEIF3、AVERAGEIFS VLOOKUP与COLUMN1、VLOOKUP2、COLUMN 查找函数LOOKUP1、基础语法2、向量形式3、数组形式 常用的三个数…...
如何选择适合自己的编程语言?大学新生入门编程最佳路径指南
编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?本文将为你提供详细的指导,为你的大学生…...
编程的法则 依赖倒置原则 (Dependency Inversion Principle)包括如何实践
编程的法则 依赖倒置原则 (Dependency Inversion Principle)包括如何实践 flyfish 2017-07-19 2024-07-18 在软件工程中,存在着层次结构,其中上层的业务逻辑依赖于下层的实现细节。如果是直接的依赖关系可能会导致问题…...
[数据集][目标检测]肾结石检测数据集VOC+YOLO格式1299张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1299 标注数量(xml文件个数):1299 标注数量(txt文件个数):1299 标注…...
pxe安装部署
RHEL7为例: ifconfig查看ip 一.环境配置 1.配置软件仓库: mkdir /rhel7 mount /dev/cdrom /rhel7 echo mount /dev/cdrom /rhel74 >> /etc/rc.d/rc,local chmod x /etc/rc.d/rc.local 2.关闭火墙和selinux,下载…...
Linux用户-sudo命令
作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…...
Unity强化工程 之 SpriteEditer Multiple
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1. SpriteEditer Multiple Automatic slicing - Unity 手册 这是用于裁剪图集的模式 应用之后精灵编辑器会看到Slice亮…...
大数据Flink(一百零九):阿里云Flink的基本名称概念
文章目录 阿里云Flink的基本名称概念 一、层次结构 二、概念说明 1、工作空间(Workspace) 2、项目空间(Namespace) 3、资源(Resource) 4、草稿(Draft&#…...
如何利用AI工具延长摸鱼时间、准点下班?
你好同学,我是沐爸,欢迎点赞、收藏和关注!个人知乎、公众号"沐爸空间" 俗话说,不会摸鱼的程序猿不是好的程序猿。同学,你是不是也在为不能准点下班、每天加班、没有时间提升自己而烦恼? 接下来…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
