运维SRE-02 正则表达式、grep

news2025/2/5 6:51:22

1.特殊符号补充

1.1位置相关的特殊符号

. 当前目录
.. 当前目录的上级目录
~ 当前用户家目录
/ 根目录
cd - 返回上次所在目录

1.2熟练掌握

# 注释符号,root命令提示符
| 管道符号.

1.3了解其他特殊符号

$ 取值(取出变量的值),普通用户的提示符
!
%
^
&
*
()
+
=
{}
[]
;
?
\

2.通配符

* :*.txt  *.log  *.avi
{} :
通配符
*所有,任何内容
{}生成序列
?任意一个字符
[]
[^]
@基本用法
[root@hb-sre-001 find]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@hb-sre-001 find]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@hb-sre-001 find]# echo oldboy{01..10}
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
[root@hb-sre-001 find]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@hb-sre-001 find]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@hb-sre-001 find]# echo {1,5,9}
1 5 9
[root@hb-sre-001 find]# echo oldboy{1,5,9}
oldboy1 oldboy5 oldboy9
[root@hb-sre-001 find]# 

#通过{}进行备份
[root@hb-sre-001 find]# echo oldboy{,.bak}
oldboy oldboy.bak
[root@hb-sre-001 find]# echo a{b,c}
ab ac

#不常用
[root@hb-sre-001 find]# echo {1..10..2}
1 3 5 7 9

?任意一个字符

[root@hb-sre-001 find]# ls /bin/?
/bin/[  /bin/w
[root@hb-sre-001 find]# ll /bin/??
-rwxr-xr-x. 1 root root  52640 5月  30 22:01 /bin/ab
-rwxr-xr-x. 1 root root  62680 10月  2 2020 /bin/ar
-rwxr-xr-x. 1 root root 386424 10月  2 2020 /bin/as
-rwxr-xr-x. 1 root root  83424 6月  10 2014 /bin/bc
-rwxr-xr-x. 1 root root     26 4月   1 2020 /bin/bg
-rwxr-xr-x. 1 root root     26 4月   1 2020 /bin/cd
-rwxr-xr-x. 1 root root 155176 8月  20 2019 /bin/cp
-rwxr-xr-x. 1 root root  45392 6月  10 2014 /bin/dc
-rwxr-xr-x. 1 root root  74896 8月  20 2019 /bin/dd
-rwxr-xr-x. 1 root root 105016 8月  20 2019 /bin/df
-rwxr-xr-x. 1 root root 112992 8月  20 2019 /bin/du
lrwxrwxrwx. 1 root root      2 8月   1 00:47 /bin/ex -> vi
-rwxr-xr-x. 1 root root     26 4月   1 2020 /bin/fc
-rwxr-xr-x. 1 root root     26 4月   1 2020 /bin/fg
-rwxr-xr-x. 1 root root  37400 8月  20 2019 /bin/id
lrwxrwxrwx. 1 root root     20 8月   1 00:47 /bin/ld -> /etc/alternatives/ld
-rwxr-xr-x. 1 root root  58592 8月  20 2019 /bin/ln
-rwxr-xr-x. 1 root root 117608 8月  20 2019 /bin/ls
-rwxr-xr-x. 1 root root 130360 8月  20 2019 /bin/mv
lrwxrwxrwx. 1 root root     22 8月   2 10:56 /bin/nc -> /etc/alternatives/nmap
-rwxr-xr-x. 1 root root  41576 8月  20 2019 /bin/nl
-rwxr-xr-x. 1 root root  42392 10月  2 2020 /bin/nm
-rwxr-xr-x. 1 root root  66368 8月  20 2019 /bin/od
-rwxr-xr-x. 1 root root  66672 8月  20 2019 /bin/pr
-rwxr-xr-x. 1 root root 100112 10月  1 2020 /bin/ps
-rwxr-xr-x. 3 root root  76760 6月  10 2014 /bin/rb
-rwxr-xr-x. 1 root root  62872 8月  20 2019 /bin/rm
-rwxr-xr-x. 3 root root  76760 6月  10 2014 /bin/rx
-rwxr-xr-x. 3 root root  76760 6月  10 2014 /bin/rz
-rwxr-xr-x. 3 root root  80872 6月  10 2014 /bin/sb
lrwxrwxrwx. 1 root root      6 8月   1 00:47 /bin/sg -> newgrp
lrwxrwxrwx. 1 root root      4 8月   1 00:47 /bin/sh -> bash
-rwsr-xr-x. 1 root root  32128 10月  1 2020 /bin/su
-rwxr-xr-x. 3 root root  80872 6月  10 2014 /bin/sx
-rwxr-xr-x. 3 root root  80872 6月  10 2014 /bin/sz
-rwxr-xr-x. 1 root root  45680 8月  20 2019 /bin/tr
-rwxr-xr-x. 1 root root  19936 10月  1 2020 /bin/ul
-rwxr-xr-x. 1 root root 928056 10月 14 2020 /bin/vi
-rwxr-xr-x. 1 root root  41648 8月  20 2019 /bin/wc
-rwxr-xr-x. 1 root root  75280 11月  5 2016 /bin/xz

正则表达式

目标:掌握常见的正则表达式符号,通过三剑客使用

正则表达式:

啥是正则?
学习正则注意事项?
正则VS通配符?
学习正则+grep+http://re.oldboylinux.cn/#!flags=&re=%5E(a%7Cb)*%3F%24
习题,

学习正则注意事项
  1. 刚开始学习,建议通过正则网站和grep一起理解与观察,正则符号含义与特点。
  2. 正则符号都是英文符号
  3. 给grep命令设置好别名,过滤的时候有红色(C7)
正则vs通配符
共同点支持的命令匹配的内容不同
正则用过过滤字符.三剑客,高级语言python,GoLang,java…过滤字符(文件内容)
通配符让人感觉是用于过滤字符.Linux下面大部分命令都可以使用匹配文件名
正则概述
分类
基础正则^ $ . * [] [^]
扩展正则| () {} ? +
基础正则-详解

环境准备 re.txt

I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

1)^以…开头的行

#案例1:
过滤以my开头的行
[root@hb-sre-001 hb]# grep '^my' re.txt 
my blog is http://oldboy.blog.51cto.com  
my qq is 49000448
my god ,i am not oldbey,but OLDBOY!

2)$以…结尾的行

案例2:过滤出以数字8结尾的行
[root@hb-sre-001 hb]# grep '8$' re.txt 
my qq is 49000448
案例3:过滤出以m结尾的行
[root@hb-sre-001 hb]# grep 'm$' re.txt 
[root@hb-sre-001 hb]# 
#说明文件结尾的地方可能还有特殊符号,无法看到.
#cat -A查看即可.
[root@hb-sre-001 hb]# cat -A re.txt 
I am oldboy teacher!$
I teach linux.$
I like badminton ball ,billiard ball and chinese chess!$
my blog is http://oldboy.blog.51cto.com M-BM- $
our size is http://blog.oldboyedu.com M-BM- $
my qq is 49000448$
not 4900000448.$
my god ,i am not oldbey,but OLDBOY!$

在这里插入图片描述

3)^$空行(这行这行没有任何字符)

案例4 过滤出文件中的空行并显示行号.
[root@hb-sre-001 hb]# grep -n '^$' re.txt 
3:
7:
10:

案例5 排除文件中的空行(遇到空行不显示)
grep -nv '^$' re.txt
[root@hb-sre-001 hb]# grep -nv '^$' re.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com  
6:our size is http://blog.oldboyedu.com  
8:my qq is 49000448
9:not 4900000448.
11:my god ,i am not oldbey,but OLDBOY!

4).(点)任意一个字符

案例06:过滤任意一个字符的行,就把空行过虑掉了
[root@hb-sre-001 hb]# grep '.' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com ?
our size is http://blog.oldboyedu.com ?
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

案例7:过滤出文件中以.结尾的行
转义字符\,让.就只有.的意思,而不是任意字符的意思
[root@hb-sre-001 hb]# grep '\.$' re.txt 
I teach linux.
not 4900000448.

转义字符系列:(echo -e支持转义字符)

转义字符系列
\n回车
\ttab

6)* 前一个字符,连续出现了0次或0次以上

案例8 过滤出连续出现的0
[root@hb-sre-001 hb]# grep '0*' re.txt 
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com ?
our size is http://blog.oldboyedu.com ?

my qq is 49000448
not 4900000448.

my god ,i am not oldbey,but OLDBOY!
[root@hb-sre-001 hb]# grep -o '0*' re.txt 
000
00000

核心

理解:连续出现
理解:贪婪性

7).* 所有,任何内容

案例09: 过滤文件以任意字符开头一直到http的行
[root@hb-sre-001 hb]# grep '0*' re.txt 
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com ?
our size is http://blog.oldboyedu.com ?

my qq is 49000448
not 4900000448.

my god ,i am not oldbey,but OLDBOY!
[root@hb-sre-001 hb]# grep -o '0*' re.txt 
000
00000
[root@hb-sre-001 hb]# grep '^.*http' re.txt 
my blog is http://oldboy.blog.51cto.com ?
our size is http://blog.oldboyedu.com ?

案例10:理解贪婪性  过滤出文件以任意字符开头一直到o(字母的行)
[root@hb-sre-001 hb]# grep '^.*o' re.txt 
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

这里把好几个o(不是第一个o结尾)结尾的都过滤出来了,验证了贪婪性

8)[] [abc] 匹配a或b或c,表示1个整体,相当于是1个字符

[root@hb-sre-001 hb]# grep '[abc]' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com ?
our size is http://blog.oldboyedu.com ?
my god ,i am not oldbey,but OLDBOY!

案例11 过滤文件中的小写字母
[root@hb-sre-001 hb]# grep '[a-z]' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

案例12 过滤文件中的小写字母或大写字母
[root@hb-sre-001 hb]# grep '[a-zA-Z]' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

案例13 过滤文件中的小写字母或大写字母或数字
[root@hb-sre-001 hb]# grep '[a-zA-Z0-9]' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

在这里插入图片描述
在这里插入图片描述

可以看到grep的执行逻辑是一个字符一个字符过滤,所以会出现一起匹配的情况

案例14  过滤出以8或.或!结尾的行
[root@hb-sre-001 hb]# grep '[8.!]$' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

在这里插入图片描述

9)[^] [^abc]过滤出不是a或b或c的内容。一个整体相当于是1个字符

案例15   不匹配文件中的小写字母
[root@hb-sre-001 hb]# grep '[^a-z]' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

10)小结基础正则

基础正则符号
^以…开头的行
$以…结尾的行
^$空行
.任意一个字符
.*所有
[][abc] a或b或c
[^][^abc] 取反的 排除a或b或c
|转义字符

3.6扩展正则-详解

扩展正则需要使用:egrep或grep -E、/sed -r /awk

1)| 或者

案例16 取出文件中包含oldboy或blog的行
[root@hb-sre-001 hb]# grep -E 'oldboy|blog' /hb/re.txt 
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com ?
our size is http://blog.oldboyedu.com ?

[root@hb-sre-001 hb]# egrep 'oldboy|blog' re.txt 
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  

扩展办法:
[root@hb-sre-001 hb]# grep 'oldboy\|blog' re.txt 
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  


##注意:
[]     里面的内容都是独立的[oldboy]匹配o或l或d....建议:匹配单个字符
|      可以是独立也可以整体   a|b|c    oldboy|lidao 建议:匹配整个单词

2)+前一个字符,连续出现1次或1次以上
工作建议:一般与[]搭配。

案例  连续出现的0
[root@hb-sre-001 hb]# grep -E '0+' re.txt 
my qq is 49000448
not 4900000448.

案例17   取出文件中连续出现的数字
[root@hb-sre-001 hb]# egrep '[0-9]+' re.txt 
my blog is http://oldboy.blog.51cto.com  
my qq is 49000448
not 4900000448.

案例18: 取出文件中的单词
(1)单词  连续出现字母
(2)字母[a-Z]
(3)连续 +
[root@hb-sre-001 hb]# egrep '[a-Z]+' re.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

3)() 被括起来的内容是个整体:表示反向引用(后向引用),一般应用在sed中

案例  熟悉  过滤出oldboy或oldbey的行
egrep 'oldboy|oldbey' re.txt
[root@hb-sre-001 hb]# egrep 'oldb(o|e)y' re.txt 
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  
my god ,i am not oldbey,but OLDBOY!

4){} o{n,m}前一个字符o连续出现至少n次,最多m次
o{n}前一个字符o连续出现n次
o{n,}前一个字符o连续出现至少n次
o{,m}前一个字符o连续出现最多m次

案例20 
[root@hb-sre-001 hb]# egrep '0{1,4}' re.txt 
my qq is 49000448
not 4900000448.
[root@hb-sre-001 hb]# egrep '0{3}' re.txt 
my qq is 49000448
not 4900000448.
[root@hb-sre-001 hb]# egrep '0{4}' re.txt 
not 4900000448.
[root@hb-sre-001 hb]# egrep '0{3,4}' re.txt 
my qq is 49000448
not 4900000448.

5)? 前一个字符出现0次或1次

[root@hb-sre-001 hb]# egrep 'gd|god' wenhao.txt 
gd
god
[root@hb-sre-001 hb]# egrep 'go?d' wenhao.txt 
gd
god

o出现0次,就是gd
o出现1次,就是god
扩展正则
|或者
+连续出现1次或1次以上
()整体;后向引用
{}前一个字符连续出现n次到m次
?前一个字符出现0次或1次

命令大全

在这里插入图片描述

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

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

相关文章

git使用以及工作中开发流程

Git是当前最先进、最主流的分布式版本控制系统,免费、开源。 主要概念: 基本流程: 命令: git commit -a # 省略了add到暂存区的步骤,直接提交工作区的修改内容到版本库,不包括新增的文件。git fetc…

Python之PySpark简单应用

文章目录 一、介绍1.准备工作2. 创建SparkSession对象:3. 读取数据:4. 数据处理与分析:5. 停止SparkSession: 二、示例1.读取解析csv数据2.解析计算序列数据map\flatmap 三、问题总结1.代码问题2.配置问题 一、介绍 PySpark是Apa…

【Linux-常用命令】Linux 常用命令大全

【Linux-常用命令】Linux 常用命令大全 1)文件管理1.1.目录操作1.2.vim 操作1.3.打包压缩相关命令1.4.Linux 管道1.5.Linux 远程拷贝命令1.6.查看文件目录大小 2)文件权限管理2.1.三种基本权限2.2.更改权限 3)运行程序3.1.命令行运行3.2.后台…

睿尔曼超轻量仿人机械臂—外置按钮盒使用说明

睿尔曼RM系列机械臂的控制方式有很多种,包括:示教器、JSON、API等。在此为大家介绍外置按钮盒的使用方法。 按钮盒接线安装 按钮盒外观如下图所示,有:急停、暂停、开始、继续。四个功能按钮。用户可通过这四个按钮来实现对机械臂运…

FileGDB文件地理数据库的大小和名称限制

FileGDB文件地理数据库的大小和名称限制 官方链接 文件地理数据库的大小和名称限制如下: 文件地理数据库的大小 - 无限制 表或要素类大小 - 1 TB(默认值)、4 GB 或 256 TB(带关键字) 要素类和表的数量 - 2,147,483,6…

公共用例库计划--个人版(六)典型Bug页面设计与开发

1、任务概述 本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升…

数据结构-内部排序

简介 排序(Sorting):将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列 排序算法分为内部排序和外部排序 内部排序:在排序期间数据对象全部存放在内存的排序 外部排序&am…

【c++】取地址及const取地址操作符重载

1.const成员 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改 我们来看看下面的代码 class Date { public:Date(int year, int month,…

2024年美赛数学建模C题思路分析 - 网球的动量

# 1 赛题 问题C:网球的动量 在2023年温布尔登绅士队的决赛中,20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来首次在温布尔登公开赛失利,并结束了他在大满贯赛事中历史上最伟大的球员之一的非凡…

2024年美赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能,这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前(约2021年末)貌似可以通过WordPress自带的函数发信,并且收信方提示由xxx代…

༺༽༾ཊ—Unity之-04-原型模式—ཏ༿༼༻

首先创建一个项目, 在这个初始界面我们需要做一些准备工作, 建基础通用文件夹, 创建一个Plane 重置后 缩放100倍 加一个颜色, 任务1:使用 建造者模式 创建三种 金刚猿猴 零部件 拼接组合 首先资源商店下载 金刚猿猴 模…

从0开始搭建、上传npm包

从0开始搭建、上传npm包 1、上传一个简单获取水果价格的包创建 vite 项目在项目根目录 src 文件夹中创建 index.ts 文件,文件内容如下:在 main.ts 文件中导入、导出上面创建的方法创建 vite.config.ts 配置文件,文件内容如下配置 package.jso…

npm 包管理工具

简介 Node官网:https://nodejs.org/ Npm官网:https://www.npmjs.com/ 在现代的软件开发世界中,包管理工具起着至关重要的作用。它们为开发者社区提供了一种高效共享和使用代码的方式。在 JavaScript 的范畴内,npm(Node…

EMQX 性能调优:TCP SYN 队列与 Accept 队列

在上一篇博客(EMQX 性能调优:最大连接与文件描述符),我们深入研究了 MQTT 连接与文件描述符之间的关系,介绍了如何修改文件描述符相关的内核参数来突破默认的最大连接数量限制。 但你可能会发现,在某些情况…

9.1斐波那契数(LC509-E)

算法: 动态规划五部曲: 1.确定dp数组及下标含义 dp[i]的定义为:第i个数的斐波那契数值是dp[i] 2.确定递归公式 题目已给出:状态转移方程 dp[i] dp[i - 1] dp[i - 2]; 3.dp数组如何初始化 题目已给 dp[0] 0; dp[1] 1; …

SpringBoot使用Rabbit详解含完整代码

1. 摘要 本文将详细介绍如何在Spring Boot应用程序中集成和使用RabbitMQ消息队列。RabbitMQ是一个开源的消息代理和队列服务器,用于通过轻量级和可靠的消息在应用程序或系统之间进行异步通信。本文将通过步骤说明、代码示例和详细注释,指导读者在Spring…

2023年上-未来几年我要做什么

1月份,离职。 2月份,春节休假回来,中旬去参加了一个月的瑜伽培训,学会了倒立、鹤蝉。。。。 3月份,瑜伽培训结束,开始收拾房子,并调研各类项目。 4月份,参与了朋友的区块链项目 …

web前端开发--------阴影与转换

1.阴影分为文本阴影和盒子阴影 我们使用text-shadow属性为文本添加阴影效果,使用结构伪类为第一个子元素p添加阴影效果; 水平偏移量为负值时,表示阴影向左偏移; 垂直偏移量为负值时,表示阴影向上偏移。 …

【Linux】初始进程地址空间

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 目录 一、再谈fork二、程序地址空间2.1代码验证 三、虚拟地址&am…