linux 三剑客命令学习
grep
Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix 系统中广泛使用,它提供了强大的文本搜索功能。
基本格式
grep [option] pattern [file…]
grep命令的匹配模式pattern带"“、不带”"和’'的区别如下
- 不带引号(直接写模式)
Shell 会对模式中的特殊字符(如 *、?、$、空格等)进行解释(比如展开通配符或变量)。
如果模式中包含空格或特殊字符,可能会导致 grep 接收错误的参数。
示例:
grep hello world file # 错误!Shell 会认为 `hello` 和 `world` 是两个参数。
grep hello*world file # 如果当前目录有匹配 `hello*world` 的文件,Shell 会先进行文件名扩展。
- 双引号 “”
bash
grep “pattern” file
Shell 会解释双引号内的变量($VAR)和命令替换(command
或 $(command)),但其他字符(如 *、?)会被保留。
适合模式中包含空格或需要保留部分特殊字符(如 $ 用于正则表达式)时使用。
示例:
grep "hello world" file # 正确匹配包含 "hello world" 的行。
grep "$USER" file # Shell 会替换 `$USER` 为当前用户名,然后传递给 grep。
grep "*.txt" file # `*` 不会被 Shell 扩展,而是作为正则表达式传递给 grep。
- 单引号 ‘’
Shell 不会对单引号内的任何字符(包括变量和通配符)进行解释,所有内容会原样传递给 grep。适合模式中包含需要保留的 $、* 等正则表达式元字符时使用。
示例:
grep 'pattern' file
grep '$USER' file # 直接匹配字符串 `$USER`(而非变量值)。
grep 'hello*world' file # `*` 作为正则表达式的量词(匹配 0 或多个 `o`)。
grep 'a b' file # 匹配包含 "a b" 的行。
正则表达式
在 Linux 中,正则表达式(Regular Expressions, regex)用于文本匹配和处理,常见的工具如 grep、sed、awk 等都支持正则表达式。正则表达式由 元字符(metacharacters) 和 普通文字(literal characters) 组成:
- 普通文字(Literal Characters)
普通文字就是字面意义上的字符,例如 a、1、- 等,它们匹配自身:
grep "hello" file.txt # 匹配包含 "hello" 的行
h、e、l、l、o 都是普通文字,直接匹配。
- 元字符(Metacharacters)
元字符在正则表达式中有特殊含义,用于匹配模式。常见的元字符包括:
元字符 | 描述 | 示例 |
---|---|---|
. | 匹配 任意单个字符(除换行符 \n) | a.c 匹配 abc、a1c、a-c |
^ | 匹配 行首 | ^hello 匹配以 hello 开头的行 |
$ | 匹配 行尾 | world$ 匹配以 world 结尾的行 |
* | 匹配前一个字符 0 次或多次 | go*d 匹配 gd、god、good |
+ | 匹配前一个字符 1 次或多次 | (grep -E 或 egrep 支持) go+d 匹配 god、good,但不匹配 gd |
? | 匹配前一个字符 0 次或 1 次 | (grep -E 或 egrep 支持) colou?r 匹配 color 和 colour |
[…] | 匹配 括号内的任意一个字符 | [aeiou] 匹配任意一个元音字母 |
[^…] | 匹配 不在括号内的任意一个字符 | [^0-9] 匹配非数字字符 |
\ | 转义字符,使元字符变为普通字符 | \.匹配 . 而不是任意字符 |
{n} | 匹配前一个字符 恰好 n 次(grep -E 或 egrep 支持) | a{3} 匹配 aaa |
{n,} | 匹配前一个字符 至少 n 次(grep -E 或 egrep 支持) | a{2,} 匹配 aa、aaa、aaaa… |
{n,m} | 匹配前一个字符 n 到 m 次(grep -E 或 egrep 支持) | a{2,4} 匹配 aa、aaa、aaaa |
- 正则表达式模式示例
(1) 基本匹配
grep "hello" file.txt # 匹配包含 "hello" 的行
grep "^hello" file.txt # 匹配以 "hello" 开头的行
grep "world$" file.txt # 匹配以 "world" 结尾的行
grep "h.llo" file.txt # 匹配 "hallo"、"hello"、"hxllo" 等
(2) 字符类 […]
grep "[aeiou]" file.txt # 匹配包含任意元音字母的行
grep "[0-9]" file.txt # 匹配包含数字的行
grep "[^0-9]" file.txt # 匹配包含非数字的行
(3) 量词 *, +, ?, {n,m}
grep "go*d" file.txt # 匹配 "gd", "god", "good", "gooood" 等
grep -E "go+d" file.txt # 匹配 "god", "good", 但不匹配 "gd"
grep -E "colou?r" file.txt # 匹配 "color" 或 "colour"
grep -E "a{3}" file.txt # 匹配 "aaa"
grep -E "a{2,4}" file.txt # 匹配 "aa", "aaa", "aaaa"
(4) 转义字符 \
grep "\.txt" file.txt # 匹配 ".txt"(而不是 "atxt"、"btxt" 等)
grep "\\" file.txt # 匹配反斜杠 `\`(需要双重转义)
(5) 或操作 |
grep -E "cat|dog" file.txt # 匹配 "cat" 或 "dog"
- grep 不同模式的区别
模式 | 命令 | 说明 |
---|---|---|
基本正则表达式(BRE) | grep “pattern” | 默认模式,*、^、$ 等元字符可用,但 +、?、 需要转义 |
扩展正则表达式(ERE) | grep -E 或 egrep | 支持 +、?、{n,m} 等,无需转义 |
固定字符串模式 | grep -F 或 fgrep | 禁用正则表达式,直接匹配文字 |
相关文章:
linux 三剑客命令学习
grep Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix…...

【MySQL】第二弹——MySQL表的增删改查(CRUD)
文章目录 🎓一. CRUD🎓二. 新增(Create)🎓三. 查询(Rertieve)📖1. 全列查询📖2. 指定列查询📖3. 查询带有表达式📖4. 起别名查询(as )📖 5. 去重查询(distinct)📖6. 排序…...
Springboot中如何自定义配置类
在 Spring Boot 中,自定义配置类是通过 Configuration 注解定义的类,用于替代传统的 XML 配置,管理 Bean 的创建和应用程序的设置。 1. 创建自定义配置类 (1) 基本配置类 使用 Configuration 注解标记类,并在其中定义 Bean 方法…...

基于zernike 拟合生成包裹训练数据-可自定义拟合的项数
可以看到拟合误差其实还是有很多的,但是这个主要是包裹噪声产生的,用到了github 上的zernike 库,直接pip install 一下安装就可以了 import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import matpl…...

大模型赋能:2D 写实数字人开启实时交互新时代
在数字化浪潮席卷全球的当下,人工智能技术不断突破创新,其中大模型驱动的 2D 写实数字人正成为实时交互领域的一颗新星,引领着行业变革,为人们带来前所未有的交互体验。 一、2D 写实数字人概述 2D 写实数字人是通过计算机图形学…...

5G-A来了!5G信号多个A带来哪些改变?
5G-A来了!5G信号多个A带来哪些改变? 随着科技不断进步,通信网络的迭代升级也在加速。自4G、5G的推出以来,我们见证了通信技术的飞跃式发展。最近,越来越多的用户发现自己手机屏幕右上角的5G标识已经变成了“5G-A”。那…...

Chroma:一个开源的8.9B文生图模型
Chroma 模型讲解 一、模型概述 Chroma 是一个基于 FLUX.1-schnell 的 8.9B 参数模型。它采用了 Apache 2.0 许可证,完全开源,允许任何人使用、修改和在其基础上进行开发,不存在企业限制。该模型目前正在训练中,训练数据集从 20M…...
Ingrees 控制器与 Ingress 资源的区别
在 Kubernetes 中,单纯的 Ingress 资源定义文件(YAML)本身不会直接创建 Pod。Ingress 的作用是定义路由规则(如将外部流量路由到集群内的服务),而实际处理流量的 Pod 是由 Ingress 控制器(如 Ng…...
android 折叠屏开发适配全解析:多窗口、铰链处理与响应式布局
安卓适配折叠屏指南 折叠屏设备为安卓开发带来了新的机遇和挑战。以下是适配折叠屏的关键要点: 1. 屏幕连续性检测 // 检查设备是否支持折叠屏特性 private fun isFoldableDevice(context: Context): Boolean {return context.packageManager.hasSystemFeature(&…...

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念
[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念 1.1 网格世界的例子1.2 状态和动作1.3 状态转移1.4 策略1.5 奖励1.6 轨迹、回报、回合1.6.1 轨迹和回报1.6.2 回合 1.7 马尔可夫决策过程 本人为强化学习小白,为了在后续科研的过程中能够较好的结合强化学习来…...

1、Kafka与消息队列核心原理详解
消息队列(Message Queue, MQ)作为现代分布式系统的基础组件,极大提升了系统的解耦、异步处理和削峰能力。本文以Kafka为例,系统梳理消息队列的核心原理、架构细节及实际应用。 Kafka 基础架构及术语关系图 术语简要说明 Produce…...

免费公共DNS服务器推荐
当自动获取的DNS或本地运营商的DNS出现问题,可能导致软件无法连接服务器。此时,手动修改电脑的DNS设置或许能解决问题。许多用户觉得电脑上网速度慢、游戏卡顿,归咎于DNS问题。确实,我们可以自行设置一个DNS来改善网络体验。不少用…...
POST请求 、响应、requests库高级用法
常见请求方式POST请求 代码如下 import requestsdata {name:germey,age:25} r requests.post("https://www.httpbin.org/post",datadata) print(r.text) 如果请求方式为POST方式,运行结果如下: {"args": {}, "data"…...
React 第三十八节 Router 中useRoutes 的使用详解及注意事项
前言 useRoutes 是 React Router v6 引入的一个钩子函数,允许通过 JavaScript 对象(而非传统的 JSX 语法)定义路由配置。这种方式更适合复杂路由结构,且代码更简洁易维护。 一、基础使用 1.1、useRoutes路由配置对象 useRoute…...
ApplicationEventPublisher 深度解析:Spring 事件驱动模型的核心
ApplicationEventPublisher 是 Spring 框架中 事件驱动编程模型 的核心接口,用于实现 观察者模式(Observer Pattern)。它允许 Bean 之间通过 发布-订阅机制 进行松耦合通信,适用于解耦业务逻辑、实现异步处理等场景。 1. Applicat…...

【统计以空格隔开的字符串数量】2021-11-26
缘由一提标准的大一oj提木-编程语言-CSDN问答 void 统计以空格隔开的字符串数量() {//缘由https://ask.csdn.net/questions/7580109?spm1005.2025.3001.5141int n 0, x 0, g 0, k 1;string s "";cin >> n;getchar();while (n--){getline(cin, s);while …...

OSCP备战-kioptrixvm3详细解法
探测IP arp-scan -l 得出目标IP:192.168.155.165 也可以使用 netdiscover -i eth0 -r 192.168.155.0/24 也可以使用 nmap -sN 192.168.155.0/24 --min-rate 1000 修改hosts文件 找到IP后,通过之前读取README.txt了解到,我们需要编辑host…...
客服系统重构详细计划
# 客服系统重构详细计划 ## 第一阶段:系统分析与准备工作 ### 1. 代码审查和分析 (1-2周) - 全面分析现有代码结构 - 识别代码中的问题和瓶颈 - 理解当前系统的业务逻辑 - 确定可重用的组件 - 制作系统功能清单 ### 2. 技术栈升级准备 (1周) - 升级PHP版本到7…...

《从零构建大模型》PDF下载(中文版、英文版)
内容简介 本书是关于如何从零开始构建大模型的指南,由畅销书作家塞巴斯蒂安• 拉施卡撰写,通过清晰的文字、图表和实例,逐步指导读者创建自己的大模型。在本书中,读者将学习如何规划和编写大模型的各个组成部分、为大模型训练准备…...
视频编解码学习六之视频采集和存储
视频采集的核心原理是用光学元件(如摄像头)将光信号转换为电信号进行传输和存储。 摄像头的主要功能是将光学图像转换为电信号(模拟或数字),核心流程如下: 1. 光学成像 镜头组:聚焦光线到感光…...

大数据应用开发和项目实战-电商双11美妆数据分析
数据初步了解 (head出现,意味着只出现前5行,如果只出现后面几行就是tail) info shape describe 数据清洗 重复值处理 这个重复值是否去掉要看实际情况,比如说:昨天卖了5瓶七喜,今天卖了5瓶七…...
《算法导论(第4版)》阅读笔记:p18-p31
《算法导论(第4版)》学习第 11 天,p18-p31 总结,总计 4 页。 一、技术总结 1. Fourier transform(傅里叶变换) In mathematics, the Fourier transform (FT) is an integral transform that takes a function as input then outputs another function…...
[Java][Leetcode simple]26. 删除有序数组中的重复项
思路 第一个元素不动从第二个元素开始:只要跟上一个元素不一样就放入数组中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}...

招行数字金融挑战赛数据分析赛带赛题二
赛题描述:根据提供的脱敏资讯新闻数据,选手需要对提供的训练集进行特征工程,构建资讯分类模型,对与测试集进行准确的新闻分类。 最终得分:0.8120。十二点关榜没看到排名,估算100? 训练集很小&am…...

卡尔曼滤波算法(C语言)
此处感谢华南虎和互联网的众多大佬的无偿分享。 入门常识 先简单了解以下概念:叠加性,齐次性。 用大白话讲,叠加性:多个输入对输出有影响。齐次性:输入放大多少倍,输出也跟着放大多少倍 卡尔曼滤波符合这…...

ENSP-OSPF综合实验
AR4中通过ospf获取的其他区域路由信息,并且通过路由汇总后简化路由信息 实现全网通,以及单向重发布,以及通过缺省双向访问, 通过stub简化过滤四类五类lsa,简化ospf路由信息 通过nssa简化ospf信息 区域汇总简化R4路由信…...

电池单元和电极性能
电芯设计中的挑战 对于电池制造商来说,提高电池能量和功率密度至关重要。在高功率密度和长循环寿命之间取得平衡是电池设计中的关键挑战,通常需要仔细优化材料、电极结构和热管理系统。另一个关键挑战是通过优化重量体积比来降低电池单元的总体成本。 工…...

软件设计师-错题笔记-软件工程基础知识
1. 解析: A:体系结构设计是概要设计的重要内容,它关注系统整体的架构,包括系统由哪些子系统组成、子系统之间的关系等 B:数据库设计在概要设计阶段会涉及数据库的逻辑结构设计等内容,如确定数据库的表结…...
Redis协议与异步方式(二)
目录 1.redis pipeline 2.redis 事务 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH 3.lua 脚本 调用方式 4.ACID 特性分析 5.发布订阅 原理 命令 6.异步连接 思想 代码 1.redis pipeline 通过一次发送多次请求命令,为了减少网络传输时间。 注意:p…...
使用 Java 反射打印和操作类信息
Java 反射是 Java 语言的强大特性,允许开发者在运行时动态检查和操作类、字段、方法和构造函数等信息。通过 java.lang.Class 和 java.lang.reflect 包,反射 API 提供了类似 JDK 工具 javap 的功能,用于打印类的详细信息,或实现动态方法调用和字段访问。反射广泛应用于框架…...