【shell脚本】shell脚本之正则表达式、sed基本用法、sed文本块处理(shell脚本基础学习四)

恭喜你,找到宝藏博主了,这里会分享shell的学习整过程。

shell 对于运维来说是必备技能之一,它可以提高很多运维重复工作,提高效率。

shell的专栏,我会详细地讲解shell的基础和使用,以及一些比较常用的shell技巧。

有需要的可以从这里开始,可以教会你如何去进行shell脚本的编写,提高你的工作效率。
从第一篇基础开始:
【shell脚本】shell脚本之概念、运行方式、变量的使用、交互式脚本、运算(shell脚本基础学习一)_向往风的男子的博客-CSDN博客

正则表达式---sed基本用法---sed文本块处理
回顾
case分支case 变量 in
模式1)命令序列 ;;
模式2)命令序列 ;;
*)命令序列
esac函数 可以将公共的语句块存储在一个函数中,达到精简脚本的目的方式一
function 函数名 {命令序列
}
方式二
函数名 (){命令序列
}
----------------------------------------
for 
while 
exit
break
continue
-----------------------------
字符串处理
${变量名:} 截取
${变量名/} 替换
${变量名#} 掐头
${变量名%} 去尾
===================================
字符串初值的处理 
${变量名:-} 
[root@server0 opt]# a=
[root@server0 opt]# echo ${a:-123} 当变量是空时调用初值
123
[root@server0 opt]# a=789
[root@server0 opt]# echo ${a:-123} 变量有值时不使用初值
789
-------------------------------------------------------
配置密码时使用初值: 
#!/bin/bash
read -p "请输入用户名" u
useradd $u
read -p "请输入密码(默认123456)" p
echo ${p:-123456} | passwd --stdin $u
-------------------------------------------------------
正则表达式,使用若干符号配合对应工具,实现对文本的匹配,查找,过滤
基本正则:
^ 匹配行首
$匹配行尾
[]集合,匹配集合中的任意单个字符
[^]对集合取反
. 匹配任意单个字符
* 匹配前一个字符任意次数---不允许单独使用
\{n,m\} 匹配前一个字符n到m次
\{n\} 匹配前一个字符n次
\{n,\} 匹配前一个字符n次及以上
\{\}保留扩展正则:
+ 最少匹配一次
? 最多匹配一次
{n,m} 匹配n到m次
() 组合为整体,保留
| 或者
\b 单词边界基本正则:
^ grep ^root user 搜索以root开头
$ grep in$ user 搜索以in结尾
[] grep [in] user 搜索字母i或者n
[^] grep [^in] user 搜索除了字母i或者n
grep "." user 搜索任意单个字符,包括空格,但不包括空行
grep "ro*t" user 搜索r?t,r与t之间有没有o都可以
grep ".*" user 搜索任意, 包括空行
grep "ro\{1,2\}t" user 搜索rot,其中o可以出现1~2次
grep "ro\{2\}t" user 搜索rot,其中o出现2次
grep "ro\{1,\}t" user 搜索rot,其中o可以出现1次以及1次以上
grep "0:\{2\}" user 搜索0::
grep "\(0:\)\{2\}" user 搜索0:0:
-----------------------------------------------------------------------
使用扩展正则, 需要用egrep或者 grep -E
grep -E "ro+t" user 搜索rot,o可以出现1次以及1次以上
egrep "ro+t" user 搜索rot,o可以出现1次以及1次以上
egrep "bi?n" user 搜索bin,i可以出现0次或者1次
egrep "ro{2}t" user 搜索rot,o出现2次
egrep "ro{1,3}t" user 搜索rot,o出现1~3次
egrep "ro{2,}t" user 搜索rot,o出现2次以及2次以上
grep "\(0:\)\{2\}" user 搜索0:0:
egrep "(0:){2}" user 使用扩展正则搜索0:0:
egrep "ro|in" user 搜索ro或者in
grep "\bthe" user1 搜索单词the,前面不能有数字字母下划线======================================
echo 123 >> 1.txt
vim 
sed 流式编辑器, 非交互式修改文本,而且支持正则表达式,工作方式是逐行处理
使用方式:
1, sed 选项 (定址符)指令 被处理的文件
2, 前置命令 | sed 选项 (定址符)指令
选项
-n 屏蔽默认输出 -r 支持扩展正则 -i 写入文件
指令
p 输出 d 删除 s 替换sed -n 'p' user 使用sed输出所有行,屏蔽默认输出
sed -n '1p' user 输出第1行
sed -n '2,4p' user 输出2~4行
sed -n '3p;5p' user 输出第3行和第5行
sed -n '2,+3p' user 输出第2行以及后面的3行
sed -n '1~2p' user 输出奇数行
sed -n '2~2p' user 输出偶数行
sed -n '/bash$/p' user 使用正则输出以bash结尾的行
sed -rn '/root|bin/p' user 使用扩展正则输出有root或者bin的行sed -n '=' user 显示行号
sed -n '$=' user 显示最后一行的行号
sed -n '$=' /etc/passwd
sed 'd' user 删除所有行
sed '1d' user 删除第1行
sed '2,4d' user 删除2~4行
sed '3,+2d' user 删除第3行以及后面2行
sed '2d;5d' user 删除第2行和第5行
sed -i '1,3d' user 删除1~3行,并写入文件sed 's/xml/XML/' a.txt 将每行中第1个xml替换为XML
sed 's/xml/XML/3' a.txt 将每行中的第3个xml替换为XML
sed 's/xml/XML/g' a.txt 将所有的xml都替换为XML
sed 's/xml//g' a.txt 将所有行的xml都删除/bin/bash 换成 /sbin/shsed 's//bin/bash//sbin/sh/' user
sed 's/\/bin\/bash/\/sbin\/sh/' user
sed 's!/bin/bash!/sbin/sh!' user
sed 's(/bin/bash(/sbin/sh(' user
sed 's#/bin/bash#/sbin/sh#' user编写脚本,对vsftpd服务完成装包配置启服务的过程,其中使用sed完成配置过程,实现服务可以匿名访问并且上传文件.#!/bin/bash
yum -y install vsftpd &> /dev/null
sed -i '/anon_up/s/#//' /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
systemctl enable vsftpd
systemctl stop firewalld
setenforce 0
chmod 777 /var/ftp/pub====================================================
sed -i 's/#anon_up/anon_up/' /etc/vsftpd/vsftpd.conf

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

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

相关文章

Windows Docker部署springboot微服务

Windows Docker部署springboot微服务 前言 偶然的机会让我能够实操在Windows server 2019版本的服务器上进行springCloud服务的部署 过程中深刻的体会到了为什么Docker要推荐使用Linux系列的系统进行操作 遇到的问题 springboot镜像打包微服务启动后nacos连不上使用的基础…

[SSM]手写Spring框架

目录 十一、手写Spring框架 第一步:创建模块myspring 第二步:准备好要管理的Bean 第三步:准备myspring.xml配置文件 第四步:核心接口实现 第五步:实例化Bean 第六步:给Bean属性赋值 第七步&#xff…

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

名词解释 RTSP (Real-Time Streaming Protocol) 是一种网络协议,用于控制实时流媒体的传输。它是一种应用层协议,通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求,如…

Redis,MongoDB基本操作练习题

文章目录 NoSQL练习:RedisString类型基本操作:List类型基本操作:hash类型基本操作: MongoDB:创建一个数据库 名字grade:创建class集合:集合中插入若干数据:查看班级所有人信息:查看班…

Oracle绑定变量

一、绑定变量简介 首先理解一下OLTP系统为什么需要绑定变量? 变量绑定会使 OLTP系统 数据库中的SQL执行速度飞快,内存效率极高,减少资源消耗;不使用绑定变量可能会使 OLTP 数据库不堪重负,资源被SQL解析严重耗尽&…

【Java基础教程】(四十二)多线程篇 · 上:多进程与多线程、并发与并行的关系,多线程的实现方式、线程流转状态、常用操作方法解析~

Java基础教程之多线程 上 🔹本节学习目标1️⃣ 线程与进程🔍关于多进程、多线程、并发与并行之间的概念关系? 2️⃣ 多线程实现2.1 继承 Thread 类2.2 实现 Runnable 接口2.3 多线程两种实现方式的区别2.4 利用 Callable 接口实现多线程2.5 …

00_ubuntu_开发环境的搭建

ubuntu 的版本22.04 2023-07-21 1.卸载firefox dpkg --get-selections |grep firefox // 查看安装包的信息 sudo apt-get purge firefox firefox-locale-en firefox-locale-zh-hans // 卸载相应的包 2.下载google安装包并安装 wget https://dl.google.com/linux/direct/goo…

深度学习——过拟合和Dropout

基本概念 什么是过拟合? 过拟合(Overfitting)是机器学习和深度学习中常见的问题之一,它指的是模型在训练数据上表现得很好,但在未见过的新数据上表现较差的现象。 当一个模型过度地学习了训练数据的细节和噪声&#…

【多模态】17、CORA | 将 CLIP 使用到开集目标检测

文章目录 一、背景二、方法2.1 总体结构2.2 region prompting2.3 anchor pre-matching 三、效果 论文:CORA: Adapting CLIP for Open-Vocabulary Detection with Region Prompting and Anchor Pre-Matching 代码:https://github.com/tgxs002/CORA 出处…

Qt/C++音视频开发48-推流到rtsp服务器

一、前言 之前已经打通了rtmp的推流,理论上按照同样的代码,只要将rtmp推流地址换成rtsp推流地址,然后格式将flv换成rtsp就行,无奈直接遇到协议不支持的错误提示,网上说要换成rtp,换了也没用,而…

Linux 学习记录54(ARM篇)

Linux 学习记录54(ARM篇) 本文目录 Linux 学习记录54(ARM篇)一、框图分析1. 芯片手册内部框图2. 操作GPIO过程 二、通过汇编完成GPIO操作1. 常用的汇编指令2. GPIO初始化流程3. 查找相关寄存器(1. RCC寄存器(2. GPIO寄存器>1. 模式配置寄存器>2. 输出模式配置寄存器>3…

Jenkins常用管理功能配置 - 插件管理

Jenkins插件介绍 Jenkins是一个流行的开源持续集成/持续交付(CI/CD)工具,它有大量的插件来扩展其功能。这些插件可以用于构建、测试、部署和监控软件项目。下面是一些常用的Jenkins插件及其简单介绍和使用方法: 1. Git插件:允许Jenkins从Gi…

vue2如何将页面生成 pdf 导出 html2Canvas + jspdf

1.引入两个依赖 npm i html2canvas npm i jspdf 2.在utils文件夹下新建html2pdf.js文件 import html2canvas from html2canvas; import jsPDF from jspdf export const htmlToPDF async (htmlId, title "报表", bgColor "#fff") > { let pdfDom do…

【LeetCode每日一题合集】2023.7.17-2023.7.23(离线算法 环形子数组的最大和 接雨水)

文章目录 415. 字符串相加(高精度计算、大数运算)1851. 包含每个查询的最小区间⭐⭐⭐⭐⭐解法1——按区间长度排序 离线询问 并查集解法2——离线算法 优先队列 874. 模拟行走机器人(哈希表 方向数组)918. 环形子数组的最大和…

P5095 [USACO12OPEN] Bookshelf S

P5095 [USACO12OPEN] Bookshelf S 文章目录 P5095 [USACO12OPEN] Bookshelf S题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路赛时 code别人code 题目描述 Farmer John 闲来无事的时候总喜欢坐下来看书。这些年来,他一共收集了 N N N 本书&#…

sentinel深入讲解流量控制/熔断降级

文章目录 sentinelsentinel介绍重要的核心概念引入依赖限流的规则熔断规则yaml 项目配置使用注解 SentinelResource讲解类的静态方法 sentinel sentinel介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构…

【深度学习之YOLO8】环境部署

目录 一、确定版本CUDA toolkit、cuDNN版本Python、PyTorch版本 二、安装Python下载环境变量验证安装 三、安装Anaconda安装环境变量验证安装创建conda虚拟环境常用命令 四、安装CUDA toolkit下载环境变量验证安装 五、配置cuDNN下载 六、安装PyTorch(torchtorchversiontorchau…

【AI】使用vscode编辑查看YOLOv8源码

1、下载vscode 官网地址:https://code.visualstudio.com/ 针对ubuntu点击下载deb安装包,默认下载地址如下,下载速度很慢,而且会下载失败,解决方法如下: 将“https://az764295.vo.msecnd.net”改为“https://vscode.cdn.azure.cn”后,下载会很快。 例如,将: https:…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(五)

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …

Java设计模式—软件设计原则和七大常用的设计模式

前言 设计模式是软件开发中常见问题的解决方案,它们是经过验证的并且经常被重复使用的设计模板。设计模式提供了一套通用的解决方案,帮助开发人员构建高质量、可维护和可扩展的代码。设计模式并不是特定于某种编程语言,而是面向对象编程范式…