Shell编程基础(十五)文本三剑客(sed)
文本三剑客(sed)
- 使用场景
- 基本语法
- 实例
- 命令列表
使用场景
sed提供了一种面交互的方式修改文件内容。
它是一行一行处理,可以通过正则匹配要修改的部分
基本语法
-
基本语法
sed [-opt] command files(多个文件 空格隔开) -
sed 使用正则
sed -r “正则匹配数据行/指定行号 sed命令” files -
sed 修改内容写回文件
默认,sed操作完的数据会显示在控制台,而不会回写到文件中; 若要将变更保存到文件可以使用 -i 选项sed -ri “/正则表达式/或者指定行号 + [{]sed命令[}]” files
sed 命令可以使用 {} 括起来,也可以不写,写了意思更明确。类似$var 和 ${var}
如果要对选中的行执行多个操作可以使用 分号(;) 隔开 sed命令
sed -r "\regex expression\{s;r}" file
- 行号表示法匹配多行使用逗号分割两个行号($ 表示最后一行)
# 删除 1 到 2 行
sed -r "1,2{d}" file
实例
命令列表
- d 删除匹配的行
// 删除正则匹配的行
sed -r “/正则表达式/{d}” file
// 删除指定行
sed -r “行号{d}” file- 按正则表达式删除
sed -r "/regex expression/d" file- 删除第二行
sed -r "2d" file- 删除 2-5行
sed "2,5{d}" file- 删除5行到最后一行
sed -r "5,$d" file- 删除最后一行
sed -r "$d" file - s 替换匹配上的字符
sed -r “s/正则查找的内容/要替换的内容/” file
也可以使用 # 分割,当要替换的内容中有/或其他特殊含义字符时可以使用#,或者使用转义
sed -r “s#正则查找的内容#要替换的内容#” file
默认,只会替换每一行中的第一个匹配上的字符串;如果要全部替换,需要在最后的 / 后加个g,代表行内匹配上的字符串都替换
```bash
# 将含有 abc 的行 的第一个 abc 换成 def
sed -r “s/abc/def/” file
# 将含有 abc的行 的所有 abc 都换成 def
sed -r "s/abc/def/g" file
````
sed 的 s 命令中,如果要**引用查找到的字符串**可以使用() + \1 或 & 获取
和 vim 中 类似。
- r 读取文件,写入到sed指定的文件
读取一个文件的内容,默认会追加到 sed指定的文件中的每一行下面。
如果要追加在目标文件的指定行的下面,
可以在 r前面加上行号,同样,这里可以使用$表示最后一行
还可以使用正则匹配行,在匹配上的每一行下面都会追加读取到的内容,注意正则表达式使用 / / 分割
# 取sourcefile的内容, 追加到 destfile每一行后面
sed -r 'r sourcefile' destfile# 读取sourcefile的内容, 追加到 destfile最后一行后面
sed -r '$r sourcefile' destfile# 读取sourcefile的内容, 追加到 destfile第一行后面
sed -r '1r sourcefile' destfile# 读取sourcefile的内容, 追加到 正则表达式匹配上的每一行后面
sed -r '/正则表达式/r sourcefile' destfile
- w 写入文件,读取sed指定文件的内容写入另一个文件
将 sed指定的文件 sourcefile,另存为另一个文件 destfile
同样可以使用 行号或者 正则,选中想要保存的部分行,这样就是匹配上的行保存到目标文件中。
# 将 整个sourcefile文件内容写入 destfile
sed -r 'w destfile' sourcefile# 将sourcefile文件 指定行写入 destfile
sed -r '1w destfile' sourcefile# 将sourcefile文件 指定范围行写入 destfile
sed -r '1,5w destfile' sourcefile# 将sourcefile文件 正则匹配上的行 写入 destfile
sed -r '/正则表达式/w destfile' sourcefile
- a 追加内容,在匹配行下面写入数据
和上面一样,可以使用固定行号,范围行号以及正则表达式匹配要追加的行,不限制时,应用到每一行。
追加多行可以使用 \n 转义实现
# 给file文件每一行下面添加一行 123
sed -r 'a 123' file每一行下面追加两行123
sed -r 'a 123\n123' file
-
i 插入内容,在匹配行上面写入数据
规则与上面 a 类似,只是内容写到匹配行的上面 -
c 替换匹配上的整行内容
规则与上面a 类似,对匹配上的行,整行替换
# 第一行替换为 123
sed -r '1c 123' file# 第一行到第二行替换为 123
sed -r '1,2c 123' file# 匹配上正则的行 替换为 123
sed -r '/正则表达式/c 123' file
- n 匹配当前行,组合其他sed命令作用到下一行
需与其他命令结合使用,n命令仅仅用于查找,组合的其他命令才是作用到下一行的命令
# 删除第二行
sed -r '1n;d' file
- ! 反选;对匹配的结果取反,然后应用后面的sed命令
# 删掉 除了第一行的其他行
sed -r '1! d' file# 删掉 正则 不 匹配的行
sed -r '/正则表达式/! d' file
- e 多次编辑,
正常sed 只能应用依次编辑
类似
sed -r '1 d' file
如果想一个命令执行多个独立的编辑操作,可以使用-e
# 删除第一行 & 第二行的aa换成bb
sed -r -e '1 d' -e '2 s/aa/bb/' file
当然,也可以使用分号(;)隔离多个独立的 查找应用 命令
# 删除第一行 & 第二行的aa换成bb
sed -r '1 d;2 s/aa/bb/' file
如果是对同一行执行多个操作可以使用分号(;)隔离多个sed 应用命令
# 第二行的 aa换成bb & 第二行的 cc换成dd
sed -r '2 {s/aa/bb/;s/cc/dd/}' file
相关文章:
Shell编程基础(十五)文本三剑客(sed)
文本三剑客(sed) 使用场景基本语法实例命令列表 使用场景 sed提供了一种面交互的方式修改文件内容。 它是一行一行处理,可以通过正则匹配要修改的部分 基本语法 基本语法 sed [-opt] command files(多个文件 空格隔开) sed 使用正则 sed -…...
5,二叉树【p6-p7】
二叉树 5.1二叉树5.1.1例1:用递归和非递归两种方式实现二叉树的先序、中序、后序遍历5.1.1.1递归序的先序、中序、后序遍历先序遍历:中序遍历:后序遍历: 5.1.1.2非递归序的先序、中序、后序遍历先序遍历:中序遍历&…...
【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry
文章目录 前言Spring Retry的基本使用第一步,引入Spring Retry的jar包第二步,构建一个RetryTemplate类第三步,使用RETRY_TEMPLATE注意事项 拓展方法降级操作重试策略:时间策略重试策略:指定异常策略 前言 Spring Retr…...
pagehelper 优化自定义分页和排序位置
pagehelper开源地址 https://github.com/pagehelper/Mybatis-PageHelper 1.手写Count查询优化 源码分页count时首先是判断是否存在手写的 {业务查询id}_COUNT 的查询count统计 private Long count(Executor executor, MappedStatement ms, Object parameter,RowBounds rowBound…...
Linux下查询文件夹中文件数量的方法
一、前言 在Linux系统中,我们经常需要查询文件夹中包含多少文件。本文将介绍三种在Linux中查询文件夹中文件数量的方法,帮助你轻松获取所需信息。 二、方法 1、使用ls命令和wc命令 使用ls命令的-l选项和管道操作符|结合wc命令来统计文件数量…...
PS透明屏,在科技展示中,有哪些优点展示?
PS透明屏是一种新型的显示技术,它将传统的显示屏幕与透明材料相结合,使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性,通…...
Hbase-面试题
1. Hbase-region切分 自动切分,默认情况下 2.0版本,第一次region的数据达到256M,会进行切分,以后就是每达到10G切分一次,切分完成后,会进行负载均衡,均衡到其他regionserver预分区自定义rowke…...
图的宽度优先深度优先遍历
图常见的遍历方式有两种,一种是宽度优先遍历,一种是深度优先遍历。 宽度优先遍历 宽度优先遍历和之前介绍的二叉树的层级遍历类似,主要也是利用Queue来完成层级的遍历,除此之外,因为图中很可能有环,所以还…...
redis Set类型命令
Redis中的Set是一种无序、不重复的集合数据结构,它提供了一系列的操作命令用于对Set进行添加、删除和查找等操作。以下是Redis中Set类型常见的一些命令: SADD key member [member …]:将一个或多个成员添加到指定的集合中。 示例:…...
Netty框架自带类DefaultEventExecutorGroup的作用,用来做业务的并发
一、DefaultEventExecutorGroup的用途 DefaultEventExecutorGroup 是 Netty 框架中的一个类,用于管理和调度事件处理器(EventExecutor)的组。在 Netty 中,事件处理是通过多线程来完成的,EventExecutor 是处理事件的基…...
TCP的四次挥手与TCP状态转换
文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的,所以断开的时候也是双向的。 步骤 三次…...
【网络编程】实现一个简单多线程版本TCP服务器(附源码)
TCP多线程 🌵预备知识🎄 Accept函数🌲字节序转换函数🌳listen函数 🌴代码🌱Log.hpp🌿Makefile☘️TCPClient.cc🍀TCPServer.cc🎍 util.hpp 🌵预备知识 &…...
centos离线部署docker
有些内部环境需要离线部署,以下做一些备忘。 环境:centos7.9 准备文件: docker-20.10.9.tgz,下载地址 https://download.docker.com/linux/static/stable/x86_64/docker.service,内容见下文daemon.json,内…...
ffmpeg使用滤镜对视频进行处理播放
一、前言 在现代的多媒体处理中,视频和音频滤镜起着至关重要的作用。可以帮助开发者对视频和音频进行各种处理,如色彩校正、尺寸调整、去噪、特效添加等。而FFmpeg作为一个功能强大的开源多媒体框架,提供了丰富的滤镜库,使我们能够轻松地对多媒体文件进行处理和转换。 本…...
Ansible Handlers模块详解,深入理解Ansible Handlers 自动化中的关键组件
深入理解Ansible Handlers 自动化中的关键组件 在现代的IT环境中,自动化已经成为提高效率和减少错误的关键。Ansible作为一款流行的自动化工具,通过使用Playbooks来定义和执行任务。而Handlers作为Ansible的组件之一,在自动化过程中发挥着重要…...
threejs点击模型实现模型边缘高亮的选中效果--更改后提高帧率
先来个效果图 之前写的那个稍微有点问题,帧率只有30,参照官方代码修改后,帧率可以达到50了,在不全屏的状态下,帧率60 1.首先需要导入库 // 用于模型边缘高亮 import { EffectComposer } from "three/examples/js…...
RocketMQ 主备自动切换模式部署
目录 主备自动切换模式部署 Controller 部署 Controller 嵌入 NameServer 部署 Controller 独立部署 Broker 部署 兼容性 升级注意事项 主备自动切换模式部署 该文档主要介绍如何部署支持自动主从切换的 RocketMQ 集群,其架构如上图所示ÿ…...
【MySQL】select相关
文章目录 迭代器distinct 关键字limit offset 关键字order by 列名 asc\descselect语句的执行顺序几点注意 迭代器 指向第一个元素 使用hasNext()进行判断后才进行取元素 resultSet:指向第一个元素前一个 distinct 关键字 去除一列中的重复元素 可以进行多行的去重…...
在Python中应用RSA算法实现图像加密:基于Jupyter环境的详细步骤和示例代码
一、引言 在当今的数字化社会中,信息安全问题备受关注。随着数字图像在生活中的应用越来越广泛,图像的安全性和隐私性也成为人们关心的焦点。如何在网络上安全地传输和存储图像已经成为一项重要的挑战。RSA(Rivest-Shamir-Adleman)算法作为一种被广泛应用的公钥密码体系,…...
Prometheus Blackbox Exporter 的 HTTP 探测指标中各个阶段的时间统计信息
在 Prometheus Blackbox Exporter 的 HTTP 探测指标中,probe_http_duration_seconds 指标包含各个阶段的时间统计信息。这些阶段代表了 HTTP 探测的不同阶段和指标。以下是各个阶段的含义: phase"dns_lookup":这是指进行 DNS 查找…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
