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 查找…...
OpenClaw 深度研究报告:从开源框架到企业级智能体平台的演进之路
一、核心定位:突破"对话天花板"的执行中枢 OpenClaw(外号"龙虾") 是由奥地利工程师 Peter Steinberger 于 2025 年底开发的本地优先、模型无关的 AI 智能体运行框架。其核心价值主张极为鲜明: “The AI that …...
SpringBoot+Hadoop实战:手把手教你搭建民宿数据可视化平台(附完整源码)
SpringBootHadoop实战:构建高可用民宿数据可视化平台 1. 项目背景与技术选型 民宿行业近年来呈现爆发式增长,随之而来的是海量房源信息、用户评价和交易数据的积累。传统的关系型数据库在处理这类数据时面临存储瓶颈和计算性能不足的问题。我们选择Spr…...
ESP32-S3驱动ILI9341屏幕避坑指南:从LVGL组件手动移植到流畅显示(ESP-IDF 5.4.1)
ESP32-S3驱动ILI9341屏幕避坑指南:从LVGL组件手动移植到流畅显示(ESP-IDF 5.4.1) 当你在ESP32-S3上尝试将LVGL移植到ILI9341屏幕时,可能会遇到各种奇怪的问题:内存溢出、屏幕模糊、驱动不匹配等。这些问题往往让开发者…...
DAMO-YOLO实战:搭建教育科研AI视觉实验平台
DAMO-YOLO实战:搭建教育科研AI视觉实验平台 1. 教育科研中的AI视觉需求 在教育科研领域,视觉AI技术正成为重要的研究工具。传统计算机视觉实验平台往往面临部署复杂、性能有限、交互体验差等问题。DAMO-YOLO智能视觉探测系统为解决这些问题提供了创新方…...
Arduino_ConnectionHandler库:嵌入式网络连接状态管理与自适应重连
1. Arduino_ConnectionHandler 库深度解析:嵌入式网络连接管理的工程实践指南1.1 库定位与核心价值Arduino_ConnectionHandler是 Arduino 官方生态中面向物联网终端设备的网络连接抽象管理层,其设计目标并非替代底层通信协议栈(如 WiFiClient…...
【花雕学编程】Arduino BLDC 之使用互补滤波进行姿态控制的机器人
从专业工程视角来看,基于Arduino、使用互补滤波进行姿态控制的BLDC(无刷直流电机)机器人,是一个典型的嵌入式实时闭环控制系统。它集成了传感器数据融合、控制算法和电机驱动,广泛应用于对姿态稳定性有要求的场景。 1、…...
Swiper动画进阶:手把手教你用Swiper Animate制作节日主题动画(2023最新版)
Swiper动画进阶:手把手教你用Swiper Animate制作节日主题动画(2023最新版) 当节日氛围遇上交互设计,如何让静态页面"活"起来?Swiper Animate作为Swiper生态中的动画引擎,能通过简单的类名配置实现…...
万象视界灵坛效果展示:血条式置信度进度条与‘同步率’动态分布图实录
万象视界灵坛效果展示:血条式置信度进度条与同步率动态分布图实录 1. 平台概览 万象视界灵坛(Omni-Vision Sanctuary)是一款基于OpenAI CLIP技术的高级多模态智能感知平台。不同于传统视觉识别工具的单调界面,它将复杂的"语…...
保姆级教程:从GEO下载Hi-C数据到HiC-Pro完整分析(避坑指南+实战脚本)
从零开始掌握Hi-C数据分析:HiC-Pro全流程实战与避坑指南 Hi-C技术已经成为三维基因组研究的重要工具,但对于刚接触生物信息学的研究人员来说,从原始数据到最终分析结果的过程往往充满挑战。本文将带你完整走通Hi-C数据分析全流程,…...
【实战指南】腾讯会议回放视频如何批量下载与本地永久保存?免费工具全解析
1. 为什么需要本地保存腾讯会议回放? 每次参加完重要会议或培训课程,最怕的就是回放视频突然过期。我遇到过好几次这种情况:刚想复习某个关键知识点,发现视频已经显示"已过期"。特别是当会议组织者设置了7天自动删除规则…...
