当前位置: 首页 > news >正文

Linux进阶之Shell-sed

基本用法:

sed + 选项 + “指令” 文件

常用选项:

-e   --它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时使用
-f   --后跟保存了sed指令的文件
-i   --直接对内容进行修改,不加 i 时默认只是预览,不会对文件进行实际修改
-n   --取消默认输出,sed默认会输出所有文本内容,使用 -n 参数后只显示处理过的行

编辑命令:

a   --追加,向匹配行后插入内容 append
c   --更改,更改匹配行的内容 change
i   --插入,向匹配行前插入内容 insert
d   --删除,删除匹配的内容 delete
s   --替换,替换匹配到的内容 substitute
p   --打印,打印匹配到的内容,通常与 -n 和用 print
=   --用来打印被匹配到的行的行号
n  --读取下一行,遇到n时会自动跳入下一行 next
r,w   --读和写,r用于将内容读入文件,w用于将匹配内容写入到文件
// 匹配字符串

1,2 1,2 行
1~2 1 到 2行
$ 最后一行
^$ 空行
.* 表示所有内容,/#/,.*//g’ 表示 #开头和后面所有内容
^# 以#开通

实例:

sed -i "1ahello" 1.txt       --在第一行后面添加 “hello”,并保存修改
sed -i "/ab/ahello" 1.txt     --在内容ab后面添加 “hello”,并保存修改
sed "$ahello" 1.txt       --在最后一行添加 “hello”,可直接预览sed -i "2ihello" 1.txt       --在第二行之前插入 “hello”
sed -i "/ab/ihello" 1.txt     --在包含“ab”的行之前插入“hello”,如果有多行,则每一行之前都会添加sed -i "2chello" 1.txt       --将文件的第二行替换为“hello”
sed -i "/ab/chello" 1.txt     --将包含"ab"的行替换成“hello”sed ‘1d’ 1.txt       --删除第一行
sed '1~2d' 1.txt       --从第一行开始删除,每隔两行就删除一行,即删除奇数行
sed '1,2d' 1.txt       --删除掉1~2行
sed ‘1,2!d’ 1.txt     --删除1~2之外的所有行
sed '$d' 1.txt       --删除掉最后一行
sed '/ab/d' 1.txt       --删除匹配“ab”的行
sed ‘/ab/,$d’ 1.txt       --删除从匹配“ab”的行到最后一行
sed ‘/ab/,+1d’ 1.txt       --删除从匹配“ab”的行及后面一行
sed ‘/^$/d’ 1.txt       --删除空行
sed '/ab\|12/!d' 1.txt     --删除不匹配12或ab的行,/ab\|12/表示匹配12或ab,!表示取反
sed '1,3{/ab/d}' 1.txt     --删除1~3行中,匹配内容‘ab的行
sed 's/12/hello' 1.txt     --将文中的’12‘替换成’hello‘,默认只替换每行第一个’12‘
sed ’s/12/hello/g‘ 1.txt     --将文中的所有’12‘都替换成’hello‘
sed 's/12/hello/2' 1.txt     --将每行中第二个匹配的’12‘替换成’hello‘
sed -n 's/12/hello/gpw 2.txt' 1.txt     --将每行中所有匹配的’12‘替换成’hello‘,并将替换后的内容写入2.txt
sed '/#/,.*//g' 1.txt       --匹配有#号的行,替换匹配行中逗号后的所有内容,(,.*)表示逗号后的所有内容
sed 's/..$//g' 1.txt       --替换每行中的最后两个字符为空,每个点代表一个字符
sed 's/^#.*//'  1.txt       --#开头的行替换为空行,即注释的行
sed 's/^#.*//;/^$/d'  1.txt      --先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^[0-9]/(&)/'   1.txt      --将每一行中行首的数字加上一个小括号   (^[0-9])表示行首是数字,&符号代表匹配的内容
sed  's/$/&'ha'/'  1.txt     --在1.txt文件的每一行后面加上"ha"字段sed  -n '1p'  1.txt       --打印文件中的第一行内容
sed  -n '2~2p'  1.txt     --从第二行开始,每隔两行打印一行,波浪号后面的2表示步长
sed -n '$p'  1.txt       --打印文件的最后一行
sed -n '1,5p'  1.txt       --打印1到5行
sed  -n '5,$p'  1.txt       --打印从第5行到最后一行的内容
sed  -n '/you/p'  1.txt        --逐行读取文件,打印匹配you的行
sed  -n '/ab/,5p'  1.txt       --逐行读取文件,打印从匹配ab的行到第5行的内容
sed  -n '1,/ab/p'  1.txt        --打印第一行到匹配ab的行
sed  -n '/ab/,/ac/p'  1.txt       --打印从匹配内容ab到匹配内容ac的行
sed  -n "$="   1.txt         --打印1.txt文件最后一行的行号
ed  -n '/ab/='  1.txt         --打印匹配ab的行的行号
sed  -n '/ab/{=;p}'   1.txt        --打印匹配ab的行的行号和内容
sed  'r 2.txt'  1.txt           --将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt的内容
sed '1r 2.txt'  1.txt           --1.txt的第1行之后插入文件2.txt的内容
sed  '/ab/r   2.txt'   1.txt       --在匹配ab的行之后插入文件2.txt的内容,如果1.txt中有多行匹配ab则在每一行之后都会插入
sed  '$r  2.txt'   1.txt          --在1.txt的最后一行插入2.txt的内容sed  -n  'w 2.txt'   1.txt         --将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在则创建,如果2.txt存在则覆盖之前的内容
sed   -n '2w  2.txt'   1.txt         --将文件1.txt中的第2行内容写入到文件2.txt
sed  -n -e '1w  2.txt'  -e '$w 2.txt'   1.txt       --将1.txt的第1行和最后一行内容写入2.txt
sed  -n -e '1w  2.txt'  -e '$w  3.txt'  1.txt         --将1.txt的第1行和最后一行分别写入2.txt和3.txt
sed  -n  '/ab\|12/w  2.txt'    1.txt          --将1.txt中匹配ab或12的行的内容,写入到2.txt中
sed  -n '/ab/,$w 2.txt'   1.txt            --将1.txt中从匹配ab的行到最后一行的内容,写入到2.txt中
sed  -n  '/ab/,+2w  2.txt'     1.txt          --将1.txt中从匹配ab的行及其后2行的内容,写入到2.txt中

相关文章:

Linux进阶之Shell-sed

基本用法: sed 选项 “指令” 文件 常用选项: -e   --它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时使用 -f   --后跟保存了sed指令的文件 -i   --直接对内容进行修改,不加 i 时默认只是预…...

前端高频面试题 Day02

面试题 var 和 let const 的区别 var 是 ES5 及之前的语法,let const 是 ES6 语法var 和 let 是变量,可修改;const 是常量,不可修改var 有变量提升,let const 没有var 没有块级作用域,let const 有 &…...

MYSQL完全卸载、安装与账号创建、权限控制

一、卸载mysql CentOS 卸载 MySQL 1. 查看安装情况 使用以下命令查看当前安装mysql情况,查找以前是否装有mysql rpm -qa|grep -i mysql这里显示我安装的 MySQL 服务有有: 2. 停止 mysql 服务、删除之前安装的 mysql 删除命令:rpm -e –n…...

get与post如何拼接url与数据的灵活处理,循环的重要性。

get与post拼接url地址不同: let postData {method: "post",data: {op: "/api/setting/maintenanceperiod?period"this.authorizationCode,loadingConfig: {},data: {period:this.authorizationCode}}}; if(this.editData.id){let postData …...

Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷达成像的高效实现

Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷达成像的高效实现 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI…...

Android学习之路(5) UI控件之Button (按钮)与 ImageButton (图像按钮)

本节引言: 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解&am…...

Day 31 C++ STL常用算法(下)

文章目录 常用拷贝和替换算法copy——容器内指定范围的元素拷贝到另一容器中函数原型注意——利用copy算法在拷贝时,目标容器要提前开辟空间示例 replace——将容器内指定范围的第一个旧元素修改为新元素函数原型注意——replace只会替换区间内满足条件的第一个旧元…...

【Android Studio】 win11 安装配置 jdk17 超详细

概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载JDK JDK官网 这里下载 JDK17 windows x64 installer 二、安装JDK 双击打开下载的 j…...

IDEA下方工具栏SideBar没有Services解决方法 IDEA配合微服务学习多端口管理打开Services栏方法

问题 微服务学习时,一次要打开多个端口,比如8080给order模块、8081给user模块……这就需要用idea管理多端口。 这时候就可以用到Services栏进行管理。 解决 首先看下方Sidebar没有Services。 打开Services 打开方式一:手动打开 在IDEA中…...

[Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“

[Vue warn]: Error in render: “SyntaxError: “undefined” is not valid JSON” 这说明出现了undefined这个变量类型,比如JSON.parse()时候会出现,可以先尝试打印JSON.parse()括号中的内容是否是undefined,如果是,那问题的根源…...

ui设计师工作总结及计划范文模板

ui设计师工作总结及计划范文模板【篇一】 白驹过隙,转眼间某某年已近结尾,时间伴随着我们的脚步急驰而去,到了个人工作总结的时候,蓦然回首,才发现过去的一年不还能画上圆满的句号,内心感慨万千&#xff0c…...

【Kafka】2.在SpringBoot中使用官方原生java版Kafka客户端

目 录 1. 新建一个消息生产者2. 新建一个消息消费者3. 测 试 在开始之前,需要先做点准备工作,用 IDEA 新建一个 Maven 项目,取名 kafka-study,然后删掉它的 src 目录,接着在 pom.xml 里面引入下面的依赖。这个项目的作…...

使用腾讯云轻量服务器Matomo应用模板建网站流量统计系统

腾讯云百科分享使用腾讯云轻量应用服务器Matomo应用模板搭建网站流量统计系统,Matomo 是一款开源的网站数据统计软件,可以用于跟踪、分析您的网站的流量,同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统,已预…...

clickhouse-监控配置

一、概述 监控是运维的一大利器,要想运维好clickhouse,首先就要对其进行监控,clickhouse有几种监控数据的方式,一种是系统本身监控,一种是通过exporter来监控,下面分别描述一下 二、系统自带监控 我下面会对监控做一…...

C++11并发与多线程笔记(5)互斥量概念、用法、死锁演示及解决详解

C11并发与多线程笔记(5)互斥量概念、用法、死锁演示及解决详解 1、互斥量(mutex)的基本概念2、互斥量的用法2.1 lock(),unlock()2.2 lock_guard类模板 3、死锁3.1 死锁演示3.2 死锁的一般解决方案:3.3 std:…...

华为云classroom赋能--Devstar使应用开发无需从零开始

华为云DevStar为开发者提供业界主流框架代码初始化能力,通过GUI、API、CLI等多种方式,将按模板生成框架代码的能力推送至用户桌面。同时基于华为云服务资源、成熟的DevOps开发工具链和面向多场景的众多开发模板,提供一站式创建代码仓、自动生…...

软件的数据回滚

原理:所谓的数据回滚,就是数据备份 增量备份: 全量备份: 最简单的事全量备份。 就是spoon工具,完成把所有的表每天定时复制一份,表名“_日期”。 所以有实时表,每日备份表。 回滚就是把之前…...

git clone使用https协议报错OpenSSL SSL_read: Connection was reset, errno 10054

在使用git 下载github上的代码时, 一般有ssh协议和https协议两种。使用ssh协议可以成功clone代码, 但使用https协议时出错: $ git clone https://github.com/openai/improved-diffusion.git Cloning into improved-diffusion... fatal: unab…...

化繁为简,使用Hibernate Validator实现参数校验

前言 在之前的悦享校园的开发中使用了SSM框架,由于当时并没有使用参数参数校验工具,方法的入参判断使用了大量的if else语句,代码十分臃肿,因此最近在重构代码时,将框架改为SpringBoot后,引入了Hibernate V…...

【Qt】多线程

线程创建 自定义线程类 #ifndef CUSTOMETHREAD_H #define CUSTOMETHREAD_H#include <QObject> #include <QThread> #include "add.h"class CustomeThread : public QThread {Q_OBJECT public:// Bind the thread kernel function.explicit CustomeThre…...

基于ENVI、eCognition与ArcGIS的南京江北新区土地利用变化监测与驱动分析

1. 南京江北新区土地利用变化监测的技术路线 我第一次接触南京江北新区土地利用监测项目时&#xff0c;被这个区域的快速发展震撼到了。作为国家级新区&#xff0c;这里从2015年设立至今&#xff0c;土地利用格局发生了翻天覆地的变化。要准确捕捉这些变化&#xff0c;我们采用…...

若依框架菜单管理进阶:从零构建独立详情页面的完整实践

1. 若依框架菜单管理基础与详情页需求分析 第一次接触若依框架的开发者可能会对它的菜单管理系统感到困惑。作为一个基于Spring Boot和Vue.js的前后端分离框架&#xff0c;若依的菜单管理实际上扮演着系统导航和权限控制的双重角色。在标准代码生成器生成的页面中&#xff0c;…...

STM32 FSMC/FMC接口配置与调试:从时序参数到实战应用

1. 项目概述&#xff1a;为什么FSMC/FMC是STM32开发者绕不开的“硬骨头”&#xff1f;在STM32的众多外设中&#xff0c;FSMC&#xff08;Flexible Static Memory Controller&#xff0c;灵活静态存储器控制器&#xff09;及其升级版FMC&#xff08;Flexible Memory Controller&…...

3分钟解决Windows热键冲突:Hotkey Detective完全使用指南

3分钟解决Windows热键冲突&#xff1a;Hotkey Detective完全使用指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否…...

STM32H743实战:用SN65HVD230驱动14个伺服电机,1M波特率稳如老狗

STM32H743与SN65HVD230构建高密度CANopen伺服控制系统的工程实践 在工业自动化与机器人控制领域&#xff0c;多轴协同运动控制对总线系统的实时性和稳定性提出了严苛要求。本文将深入剖析基于STM32H743微控制器与SN65HVD230 CAN收发器搭建的高密度伺服控制系统&#xff0c;分享…...

第 12 篇:W55RP20-EVB-Pico MicroPython 实战:MQTT 协议基础通信验证

本文为 WIZnet W55RP20 芯片 MicroPython教程第 12 篇&#xff0c;基于官方最新固件编写&#xff0c;代码均经过实际验证&#xff0c;可直接烧录运行。 版权声明&#xff1a;本文为 WIZnet 官方原创技术文章&#xff0c;转载请注明出处。 前言 上一篇实战教程&#xff0c;我们…...

终极指南:5个简单步骤让魔兽争霸3在现代电脑上完美运行

终极指南&#xff1a;5个简单步骤让魔兽争霸3在现代电脑上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为魔兽争霸…...

如何用QKeyMapper实现Windows键鼠手柄自由映射:免费开源终极指南

如何用QKeyMapper实现Windows键鼠手柄自由映射&#xff1a;免费开源终极指南 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支持游戏手柄映射到键鼠&…...

通过用量看板与账单追溯实现团队 AI 成本精细化管理

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过用量看板与账单追溯实现团队 AI 成本精细化管理 对于技术团队而言&#xff0c;将大模型能力集成到产品与研发流程中已成为常态…...

Arm SME指令集:多向量整数运算与矩阵加速详解

1. SME指令集与多向量整数运算概述在现代处理器架构中&#xff0c;SIMD&#xff08;单指令多数据&#xff09;技术已经成为提升计算性能的关键手段。作为Armv9架构的重要扩展&#xff0c;SME&#xff08;Scalable Matrix Extension&#xff09;指令集专门针对矩阵运算进行了深度…...