运维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
god

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

命令大全

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Quick BI中lod函数之lod_fixed

一、lod函数简介 LOD函数的全称是详细级别表达式(Level Of Detail Expressisons)。它主要是为了克服一些表达式之间计算颗粒度不一致的问题。比如,要计算第一季度各月销售收入占比,这里分子计算颗粒度为’月’,但是分…

2024年美国大学生数学建模D题思路分析 - 大湖区水资源问题

# 1 赛题 问题D:大湖区水资源问题 背景 美国和加拿大的五大湖是世界上最大的淡水湖群。这五个湖泊和连接的水道构成了一个巨大的流域,其中包含了这两个国家的许多大城市地区,气候和局部天气条件不同。 这些湖泊的水被用于许多用途&#xff…

TypeScript 学习笔记(Day4)

「写在前面」 本文为 b 站黑马程序员 TypeScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. TypeScript 学习笔记(Day1) 2. TypeScript 学习笔…

大力说视频号第三课:手把手教你视频号如何认证

视频号生态不断完善,越来越多的创作者认识到视频号认证的重要性。微信视频号认证不但能提升搜索排名,还能直播推流、与企业微信的关联等优势。 今天大力就来向大家介绍一下视频号如何做认证。 01 个人认证 个人认证又包括兴趣认证和职业认证。 A、兴趣…

基于Java SSM框架实现校园快领服务系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现校园快领服务系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于校园快领服务系统当然也不能排除在外,随着网络技术的不断成熟,带动了…

保姆级的指针详解(超详细)

目录 一.内存和地址  1.初识指针 2.如何理解编址 二. 指针变量 三.指针的解引用操作符 1.指针变量的大小 四.指针变量类型的意义 五.指针的运算 1.指针加减整数 2.指针减指针 3.野指针 3.1指针未初始化 3.2指针越界访问 3.3指针指向的空间被提前释放 3.4如何规…

Rust学习之Features

Rust学习之Features 一 什么是 Features二 默认 feature三 简单的features应用示例四 可选(optional)的依赖五 依赖的特性5.1 在依赖表中指定5.2 在features表中指定 六 命令行中特性控制七 特性统一路径八 其它8.1 相互排斥特性8.2 观察启用特性8.3 [Feature resolver version…

从源码角度透视QTcpServer:解构QTcpServer的底层原理与技术细节

深入了解QTcpServer的底层原理和技术细节 一、背景二、QTcpServer的基本原理2.1、TCP协议简介2.2、QTcpServer的概念 三、QTcpServer源码解析3.1、QTcpServer的构造函数3.2、调用listen函数启动tcpserver3.3、QSocketNotifier的实现 总结 一、背景 QTcpServer是Qt网络模块中的…

花瓣网美女图片爬取

爬虫基础案例01 花瓣网美女图片 网站url:https://huaban.com 图片爬取 import requests import json import os res requests.get(url "https://api.huaban.com/search/file?text%E7%BE%8E%E5%A5%B3&sortall&limit40&page1&positionsear…

『C++成长记』string使用指南

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、string类介绍 二、string类的常用接口说明 📒2.1string类对象的常…

数据结构+算法(第10篇):叉堆“功夫熊猫”的速成之路

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

Elasticsearch:集群故障排除和优化综合指南

Elasticsearch 是一个强大的搜索和分析引擎,是许多数据驱动应用程序和服务的核心。 它实时处理、分析和存储大量数据的能力使其成为当今快节奏的数字世界中不可或缺的工具。 然而,与任何复杂的系统一样,Elasticsearch 可能会遇到影响其性能和…

【ACL 2023】Enhancing Document-level EAE with Contextual Clues and Role Relevance

【ACL 2023】Enhancing Document-level Event Argument Extraction with Contextual Clues and Role Relevance 论文:https://aclanthology.org/2023.findings-acl.817/ 代码:https://github.com/LWL-cpu/SCPRG-master Abstract 与句子级推理相比&…

linux中的静态库和共享库

库:库是二进制文件,是源代码文件的另一种表现形式,是加了密的源代码;是一些功能相近或者相似函数的集合体 库的使用: 头文件--包含了库函数的声明 库文件--包含了库函数的代码实现 注意:库不能单独使用…

应用智能家居领域中的低功耗蓝牙模块

智能家居(smart home, home automation)是以住宅为平台,利用综合布线技术、网络通信技术、 安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安…

某零售公司竞聘上岗项目成功案例纪实

——建立科学选人标准、评价方法,实现人岗匹配 【客户行业】零售业;销售行业 【问题类型】竞聘上岗 【客户背景】 半月(化名)有限公司成立于2008年,以母婴零售为基础,始终坚持以客户为导向,…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

第1章 简单使用 Linux

第1章 简单使用 Linux 1.1 Linux 的组成 1.2 远程连接 首先以 root 用户登录到 Linux 系统,然后在 Terminal 终端上输入 ip add 命令,来查看 IP 地址。 上图中的 192.168.72.128 就是 IP 地址。 然后打开 XShell 远程连接工具。 然后在命令提示符下输…

C++ Webserver从零开始:基础知识(七)——多进程编程

前言 在学习操作系统时,我们知道现代计算机往往都是多进程多线程的,多进程和多线程技术能大大提高了CPU的利用率,因此在web服务器的设计中,不可避免地要涉及到多进程多线程技术。 这一章将简要讲解web服务器中的多进程编程&#x…

养猫家庭必备猫用空气净化器哪款牌子好?宠物空气净化器值得推荐的品牌

养宠家庭的朋友们都知道,猫咪的浮毛无处不在,每天都会在空气中飘荡。无论是沙发、地板还是衣服,都成了浮毛的重灾区。这些浮毛不仅难以清理,而且对于呼吸道敏感的人来说,可能会引发过敏反应。为了除去猫毛,…