当前位置: 首页 > news >正文

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 &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 &#xff1a;总 // 注释的都为后来思考不必要的 class Solution {List<List<Integer…...

历史标签如何时间迁移?

本文解析的论文是&#xff1a; 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建立任务&#xff0c;进行初步配置 四. 导入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、数组形式 常用的三个数…...

如何选择适合自己的编程语言?大学新生入门编程最佳路径指南

编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&#xff1f;本文将为你提供详细的指导&#xff0c;为你的大学生…...

编程的法则 依赖倒置原则 (Dependency Inversion Principle)包括如何实践

编程的法则 依赖倒置原则 &#xff08;Dependency Inversion Principle&#xff09;包括如何实践 flyfish 2017-07-19 2024-07-18 在软件工程中&#xff0c;存在着层次结构&#xff0c;其中上层的业务逻辑依赖于下层的实现细节。如果是直接的依赖关系可能会导致问题&#xf…...

[数据集][目标检测]肾结石检测数据集VOC+YOLO格式1299张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1299 标注数量(xml文件个数)&#xff1a;1299 标注数量(txt文件个数)&#xff1a;1299 标注…...

pxe安装部署

RHEL7为例&#xff1a; ifconfig查看ip 一.环境配置 1.配置软件仓库&#xff1a; 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&#xff0c;下载…...

Linux用户-sudo命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…...

Unity强化工程 之 SpriteEditer Multiple

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1. SpriteEditer Multiple Automatic slicing - Unity 手册 这是用于裁剪图集的模式 应用之后精灵编辑器会看到Slice亮…...

大数据Flink(一百零九):阿里云Flink的基本名称概念

文章目录 阿里云Flink的基本名称概念 一、层次结构 二、​​​​​​​​​​​​​​概念说明 1、工作空间&#xff08;Workspace&#xff09; 2、项目空间&#xff08;Namespace&#xff09; 3、资源&#xff08;Resource&#xff09; 4、草稿&#xff08;Draft&#…...

如何利用AI工具延长摸鱼时间、准点下班?

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注&#xff01;个人知乎、公众号"沐爸空间" 俗话说&#xff0c;不会摸鱼的程序猿不是好的程序猿。同学&#xff0c;你是不是也在为不能准点下班、每天加班、没有时间提升自己而烦恼&#xff1f; 接下来…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...