脚本开发与自动化运维----shell脚本开发及其在DevOps中的应用

一.正则表达式

  1. 正则表达式(Regular Expression、regex 或 regexp, 缩写为RE), 又称规则表达式,是计算机科学中的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串(包括普通字符(例如, a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式, 就是用事先定义好的一些特定字符、及这些特定字符的组合, 组成一个“规则字符串”, 这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
  2. 正则表达式这个概念最初是由 Unix中的工具软件(例如 sed 和grep)普及开的。支持正则表达式的指令如: locate|find|vim|grep|sed|awk, 我们将详细讲解grep|sed|awk。
  3. 正则表达式由元字符组成,元字符是在正则表达式中具有“特殊意义的专用字符”。不同的字符有不同的含义,有的元字符可以表示一类字符,因此由元字符组成的正则表达式可以表示一类字符,当构建好一个规则, 并设计好能准确表达这个规则的正则表达式, 那么就可以使用这个正则表达式从指定内容中获取符合这个规则的内容, 或者判断某个内容是否符合这个规则。
元字符说明实例匹配的字符串示例
一般字符匹配自身hahahaha
匹配除换行'\n'以为的任意一个字符,在DOTALL模式中也能匹配换行符。a.cabc,adc.....
\转义字符串,改变后一个字符的意思a\.ca.c
[...]字符集,对应位置可以是其中的任意一个字符a[bcd]eabe,ace,ade
\d数字,等价于[0-9]

a\dc

a[0-9]/c

a1c,a2c....

[:lower:]小写字母
[:upper:]大写字母
[:punct:]标点符号
[:space:]换行符、回车等空白字符

二.grep

  1. grep命令是一种强大的文本搜索工具, 它能使用正则表达式搜索文本, 并把匹配的行打印出来(匹配到的标红)。grep全称是 Global Regular Expression Print, 表示全局正则表达式打印。
  2.  grep的工作方式是, 在一个或多个文件中搜索字符串模板, 模板后的所有字符串被看作文件名。搜索的结果被送到标准输出, 不影响原文件内容。
  3.  grep可用于 shell脚本, 因为 grep通过返回一个状态值来说明搜索的状态, 如果模板搜索成功, 则返回0, 如果搜索不成功,则返回1, 如果搜索的文件不存在, 则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

egrep= grep-E: 扩展的正则表达式(除了\<,\>,\b 使用其他正则都可以去掉\)。

  • 【命令格式】gre p [option] pattern file
  • 【功能】用于过滤、搜索特定的字符。

【命令参数】

  •  -A<显示行数>: -A NUM,--after-context = NUM, 除了显示符合范本样式的那一行之外, 并显示该行之后的内容。
  •  -B<显示行数>: --before-context=NUM, 除了显示符合样式的那一行之外, 并显示该行之前的内容。
  •  -C<显示行数>: -NUM,--context=NUM, 除了显示符合样式的那一行之外, 并显示该行之前后的内容。
  • -c: 统计匹配的行数
  • -e : 实现多个选项间的逻辑 or 关系 
  • -E: 扩展的正则表达式,grep-E等同于 egrep
  • -fFUE:从 FILE 获取 PATTERN 匹配
  • -F: 相当于 fgrep
  • -i-ignore-case#忽略字符大小写的差别。
  • -n: 显示匹配的行号
  • -o: 仅显示匹配到的字符串
  • -q: 静默模式,不输出任何信息
  • -s: 不显示错误信息.
  • -v: 显示不被 pattern 匹配到的行, 相当于[^] 反向匹配
  • -w: 匹配 整个单词

1.案例(匹配字符)

本例主要练习匹配字符。root用户家目录下的 test01. prel文件为匹配规则、test01 文件为普通文本文件。使用grep按照test01. prel中指定规则匹配文件test01中的字符。

 1.显示含有字符A的行,及后一行

2.显示含有字符A的行,及前一行:

3.显示含有字符A的行,及前后各一行

4.统计含有aaa的行数

5.显示含有AAA或bbb的行:

6.从文件test01.prel获取匹配规则:创建test01.prel

7.显示含有b的行,忽略·大小写并显示所在行号:

8.匹配字符串Aa:

9.静默模式匹配字符aa:

10.显示没有匹配到aa的行:

11.精确匹配单词aa:

2.案例(匹配次数相关正则使用)

【例 2-2】本例主要练习匹配次数相关正则的使用。在 root用户家目录下有文件test_grep_02, 使用正则, 匹配字符。注意, 第三行为 Tab缩进后换行、第四行为四个空格后回车、第五第六行为回车空行。

1.匹配除了换行外,任意单个字符:

2.匹配字符a、/:

3.匹配abc之外的字符:

4.匹配字母和数字:

5.匹配字母:

6.匹配数字:

7.匹配字母a-z:

8.匹配空格:

9.匹配标点符号:

3.案例(位置锚点)

【例2-3】本例主要练习位置锚定, 即定位出现的位置相关正则的使用。在 root用户家目录下有文件test_grep_03, 使用正则, 匹配字符。

1.匹配"o"0次或任意多次:

2.匹配"o"任意多次,不包括0次

3.匹配"o"0次或者1次:

4.匹配“o”至少1次

5.匹配"o"1-2次:

6.匹配“o”至少10次:

7.匹配"o"至多10次:

4.使用正则,匹配字符

【例2-4】在 root用户家目录下有文件test_grep_04,使用正则, 匹配字符。注意, 第二行为Tab空格, 第三、第四为空行。

1.行首锚定,匹配出行首为a的行:

2.行尾锚定,匹配出行尾为b的行:

3.匹配出空行:

4.匹配出以空格开头的行:

5.词首、词尾锚定,匹配出词首为a、词尾为b的词

5.分组

通过\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理。分组括号中的模式匹配到的内容,会被正则表达式引擎记录在内部变量中, 这些变量的命名方式是\1,\2,\3……

6.后向引用

引用前面的分组中的模式所匹配的字符。\1 表示从左侧起第一个括号以及与之匹配右括号之间的模式所匹配到的字符;\2 表示从左侧其第二个括号以及与之匹配右括号之间的模式所匹配的字符;\&表示前面的分组中匹配的所有字符。如图2-1为后向引用示意图。

 

7.案例(分组和后向引用相关正则表达式) 

【例2-5】本例主要练习分组和后向引用相关正则的使用。在用户家目录下有test_grep_05文件, 使用正则, 匹配满足条件的字符。

 

1.匹配以He开头的分组:

2.匹配以He开头、He结尾的分组:

3.匹配He.*wo开头、wo结尾的分组

三.sed

 sed 是 stream editor 的缩写, 中文称之为“流编辑器”。sed 命令是一个面向行处理的工具, 它以“行”为处理单位,针对每一行进行处理, 处理后的结果会输出到标准输出(STDOUT)。sed 命令不会对读取的文件做任何贸然的修改,而是首先将内容都输出到标准输出中。

1.sed 工作流

首先, sed把当前正在处理的行, 保存在一个临时缓存区中(也成为模式空间),然后处理临时缓冲区中的行, 完成后, 把该行回显到屏幕上;
sed把每一行都存在临时缓冲区,对这个副本进行编辑, 所以不会修改源文件;
sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作,编写转换程序等。

2.sed使用方法

 sed 常见的使用方法有两种, 一种为“命令行”模式; 另一种为“脚本”模式。可类比Python语言学习时, 两种编程方式。
【命令格式】sed [参数]'[地址定界] command'file
【功能】用于过滤、搜索特定的字符。
【参数】:

-i-- -i-place直接将处理的结果写入文件

【command】常用的有如下几种:

  • d: 表示删除行。
  • p: 打印该行。
  • a:在当前行之后插入新行新内容, 每行末尾需要使用‘\’续行。
  • i: 在当前行之前插入新行新内容, 每行末尾需要使用‘\’续行。
  • c: c符号后的新行新内容, 替换当前行中的文本, 每行末尾需要使用‘\’续行, 整行替换。
  • r:读取指定文件的内容。
  • w:写入指定文件。
  • s: 替换指定字符。 

3.参数-n

  • -n:静默模式。不能出模式空间内容到屏幕
案例

在root用户家目录下有文件test01,对文件进行处理:

使用静态模式和非静态模式,输出含有"4"的行。

       注意观察, 在非静默模式下, 由于打印输出到4时, 符合“模板”匹配规则, 故将结果直接回显打印在了屏幕上;而静默模式下, 仅仅输出了符合“模板”匹配规则的结果,文本本身没有被输出, 相当于输出静默。
      -n常常和p命令一起使用, 仅输出那些匹配的行, 无关行不做输出。

4.命令p、命令d

  • d:表示删除行
  • p:打印该行 

续test06案例

1.分别输出第1行、第2行、第3~4行、最后一行

2.删除第1行,并查看原文件是否发生变化

通过观察输出和查看源文件, 发现, sed 执行结果并不影响原文件。执行删除行的指令后,原文件内容不变。

5.命令a、命令i和命令c

  • a: 在当前行之后插入新行新内容, 每行末尾需要使用‘\’续行;
  • is:在当前行之前插入新行新内容, 每行末尾需要使用‘\’续行;
  • c: c符号后的新行新内容,替换当前行中的文本, 每行末尾需要使用“\’续行,整行替换。

续案例test06

1.向最后一行之后添加9999:

 

2.向当前行之后插入文本9999

 

3.向当前行之前插入文本6666:

4.向末行之前插入文本6666

5.用文本Hello world替换第5行:

6.用文本hello world替换每一行:

7.向末行插入多行文本yyyy换行8888:

注意:为了实现多行文本插入,在每一行需要加续行符“\”

6.命令r、命令w

  • r: 读取指定文件的内容。
  • w: 写入指定文件。

将/etc/hosts拷贝到用户家目录下, 重命名为 cp_hosts。对文件执行以下操作:

 

1.将cp_hosts的内容append到test06的第三行后

2.将cp_hosts的内容append到test06的末行后:

将/etc/passwd拷贝到用户家目录下,重命名为cp_passwd

1.将test06的内容覆盖写到cp_passwd文件中

2.将test06的末尾行内容,覆盖写到cp_passwd文件中

7.命令s与参数-i

  • s:替换指定字符
  • -i:直接将处理结果写到文件中。

在root用户家目录下有文件test07,对该文件进行处理

1.替换test07中的"This"为"Doudou",原文件内容不变

2.修改test07,将其中的"This"替换为"Doubu"

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

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

相关文章

信也科技网络自动化实践-网络策略管理

1、背景 随着各种法律法规和行业标准的出台和更新&#xff0c;企业或组织需要遵守各种安全合规性要求。网络安全策略管理需要符合这些要求&#xff0c;从而保障企业或组织的安全和合规性。网络安全策略管理需要涵盖企业或组织的整个网络生命周期&#xff0c;包括网络规划、设计…

场景文本检测识别学习 day04(目标检测的基础概念)

经典的目标检测方法 one-stage 单阶段法&#xff1a;YOLO系列、SSD系列 one-stage方法&#xff1a;仅预测一次&#xff0c;直接在特征图上预测每个物体的类别和边界框输入图像之后&#xff0c;使用CNN网络提取特征图&#xff0c;不加入任何补充&#xff08;锚点、锚框&#x…

Kafka 架构深入介绍 及搭建Filebeat+Kafka+ELK

目录 一 架构深入介绍 &#xff08;一&#xff09;Kafka 工作流程及文件存储机制 &#xff08;二&#xff09;数据可靠性保证 &#xff08;三&#xff09;数据一致性问题 &#xff08;四&#xff09;故障问题 &#xff08;五&#xff09;ack 应答机制 二 实…

蓝桥杯2024年第十五届省赛

E:宝石组合 根据给的公式化简后变为gcd(a,b,c)根据算数基本定理&#xff0c;推一下就可以了 然后我们对1到mx的树求约数&#xff0c;并记录约数的次数&#xff0c;我们选择一个最大的且次数大于等3的就是gcd int mx; vector<int> g[N]; vector<int> cnt[N]; int…

基于贝叶斯算法的机器学习在自动驾驶路径规划中的应用实例

目录 第一章 引言 第二章 数据准备 第三章 贝叶斯路径规划模型训练 第四章 路径规划预测 第五章 路径执行 第六章 实验结果分析 第一章 引言 自动驾驶技术的发展带来了自动驾驶车辆的出现&#xff0c;而路径规划作为自动驾驶车辆的关键功能之一&#xff0c;对于确定最佳行…

JVM之JVM栈的详细解析

Java 栈 Java 虚拟机栈&#xff1a;Java Virtual Machine Stacks&#xff0c;每个线程运行时所需要的内存 每个方法被执行时&#xff0c;都会在虚拟机栈中创建一个栈帧 stack frame&#xff08;一个方法一个栈帧&#xff09; Java 虚拟机规范允许 Java 栈的大小是动态的或者是…

标准版uni-app移动端页面添加/开发操作流程

页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的.vue文件或.nvue文件。 .vue页面和.nvue页面&#xff0c;均全平台支持&#xff0c;差异在于当uni-app发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&#xff0c;.nvue会使用原生进行渲染。…

用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本

在实际项目中&#xff0c;从Kafka到HDFS的数据是每天自动生成一个文件&#xff0c;按日期区分。而且Kafka在不断生产数据&#xff0c;因此看看kettle是不是需要时刻运行&#xff1f;能不能按照每日自动生成数据文件&#xff1f; 为了测试实际项目中的海豚定时调度从Kafka到HDF…

ActiveMQ主从架构和集群架构的介绍及搭建

一、主从和集群架构的特点 1.1 主从架构的-Master/slave模式特点 读写分离&#xff0c;纵向扩展&#xff0c;所有的写操作一般在master上完成&#xff0c;slave只提供一个热备 1.2 集群架构-Cluster模式特点 分布式的一种存储&#xff0c;水平的扩展&#xff0c;消息的分布…

CCleaner怎么清理软件缓存 CCleaner清理要勾选哪些 ccleanerfree下载

CCleaner软件是一款优秀的数据清理软件&#xff0c;其中没有硬盘和内存的设置&#xff0c;也不含任何广告软件&#xff0c;其出色的注册表清洁功能能够保证您的电脑更稳定运行。本文将围绕CCleaner怎么清理软件缓存&#xff0c;CCleaner清理要勾选哪些的相关内容进行介绍。 一、…

计算机网络——DNS协议

目录 前言 前篇 引言 IP地址与域名 DNS协议的工作流程 DNS服务器节点之间是如何维护上下级关系的 前言 本博客是博主用于复习计算机网络的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 这篇博客是在B站掌芝士zzs这个UP主的视频的总结&#xff0c;讲的非…

将本地项目上传到Github

首先安装git、创建github账号 1、创建一个新的仓库 2、创建SSH KEY。先看一下你C盘用户目录下有没有.ssh目录&#xff0c;有的话看下里面有没有id_rsa和id_rsa.pub这两个文件&#xff0c;有就跳到下一步&#xff0c;没有就通过下面命令创建。 ssh-keygen -t rsa -C "you…

面试算法-174-二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 解 class Solut…

代码随想录Day41:动态规划Part3

Leetcode 343. 整数拆分 讲解前&#xff1a; 毫无头绪 讲解后&#xff1a; 这道题的动态思路一开始很不容易想出来&#xff0c;虽然dp数组的定义如果知道是动态规划的话估摸着可以想出来那就是很straight forward dp定义&#xff1a;一维数组dp[i], i 代表整数的值&#xf…

pyqt QToolBar 选中高亮

目录 效果图 示例代码 效果图 示例代码 from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QToolBar, QToolButtonclass HighlightingToolButton(QToolButton):def __init__(self, parentNone):super().__init__(parent)self.setCheckable(True)def nextChe…

ins视频批量下载,instagram批量爬取视频信息

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…

尚鼎环境科技诚邀您参观2024第13届生物发酵展

参展企业介绍 尚鼎环境科技(江苏)有限公司设立于2010年&#xff0c;公司坐落于江南平原南端素有『苏北门户』之称的古城扬州&#xff0c;办公室位在江苏省扬州市邗江区高新技术创业服务中心。 尚鼎环境科技长年致力于食品精炼/环境工程领域全程技术服务&#xff0c;工程实绩遍…

OpenHarmony南向开发案例:【智能体重秤】

一、简介 本demo基于OpenHarmony3.1Beta版本开发&#xff0c;该样例能够接入数字管家应用&#xff0c;通过数字管家应用监测体重秤上报数据&#xff0c;获得当前测量到的体重&#xff0c;身高&#xff0c;并在应用端形成一段时间内记录的体重值&#xff0c;以折线图的形式表现…

html公众号页面实现点击按钮跳转到导航

实现效果&#xff1a; 点击导航自动跳转到&#xff1a; html页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳转导航</title><meta name"keywords" conten…

华为框式交换机S12700E系列配置CSS集群

搭建集群环境 a.为两台交换机上电&#xff0c;按照数据规划分别对两台框式交换机进行配置 <HUAWEI> system-view [HUAWEI] sysname Switch1 [Switch1] set css id 1 [Switch1] set css priority 150 //框1的集群优先级配置为150 [Switch1] interface css-port 1 [Sw…