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

2024-02-02 17:36

本文主要是介绍运维SRE-02 正则表达式、grep,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

命令大全

在这里插入图片描述

这篇关于运维SRE-02 正则表达式、grep的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671455

相关文章

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

JavaScript正则表达式六大利器:`test`、`exec`、`match`、`matchAll`、`search`与`replace`详解及对比

在JavaScript中,正则表达式(Regular Expression)是一种用于文本搜索、替换、匹配和验证的强大工具。本文将深入解析与正则表达式相关的几个主要执行方法:test、exec、match、matchAll、search和replace,并对它们进行对比,帮助开发者更好地理解这些方法的使用场景和差异。 正则表达式基础 在深入解析方法之前,先简要回顾一下正则表达式的基础知识。正则

匹配电子邮件地址的正则表达式

这个正则表达式 QRegularExpression regex(R"((\w+)(\.|_)?(\w+)@(\w+)(\.(\w+))+))"); 用于匹配电子邮件地址的格式。下面是对这个正则表达式的逐步解析和解释: 1. QRegularExpression 构造函数 QRegularExpression regex(R"((\w+)(\.|_)?(\w*)@(\w+)(\.(\w+))+

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

notepad++ 正则表达式多条件查找替换

基础语法参考: https://www.cnblogs.com/winstonet/p/10635043.html https://www.linuxidc.com/Linux/2019-05/158701.htm   通常情况下我们查找的内容和要被替换掉的内容是一样的,我们只需要使用正则表达式精确框定查找内容,替换直接输入要替换的内容即可。 但有时会比较复杂,查找的内容,只需要替换其中

滚雪球学MyBatis(02):环境搭建

环境搭建 前言 欢迎回到我们的MyBatis系列教程。在上一期中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架的对比。通过这些内容,大家应该对MyBatis有了初步的了解。今天,我们将从理论走向实践,开始搭建MyBatis的开发环境。了解并掌握环境搭建是使用MyBatis的第一步,也是至关重要的一步。 环境搭建步骤 在开始之前,我们需要准备一些必要的工具和软件,包括J