Linux学习之sed替换命令加强版

news2024/10/7 8:20:48

参考文章:《Shell 编程–Sed》
cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810uname -r看到内核版本是3.10.0-957.el7.x86_64bash --version可以看到bash版本是4.2.46(2)
在这里插入图片描述

echo 'a : 1 : good ::::' >> sedplustest.txt
echo 'b : 2 : well ::::' >> sedplustest.txt
echo 'c : 3 : food ::::' >> sedplustest.txt
echo 'd : 4 : hood ::::' >> sedplustest.txt
echo 'e : 5 : bell ::::' >> sedplustest.txt
echo 'o : 6 : toll ::::' >> sedplustest.txt

使用上边的命令,把下边的内容:

a : 1 : good ::::
b : 2 : well ::::
c : 3 : food ::::
d : 4 : hood ::::
e : 5 : bell ::::
o : 6 : toll ::::

写入到sedplustest.txtcat sedplustest.txt看一下sedplustest.txt文件里边的内容。
在这里插入图片描述

全局替换

sed默认只处理模式空间第一次匹配的字符串,sed 's/:/!/' sedplustest.txt可以看到只把每行第一处:替换成了!,而每行第二处:没有任何改变,可以看到执行sed 's/:/!/' sedplustest.txt之后,sedplustest.txt里边的内容没有任何改变。
在这里插入图片描述
sed 's/:/!/g' sedplustest.txt会把每行中所有的:都替换成!,而sedplustest.txt文件的内容没有改变。
在这里插入图片描述

标志位

sed s/oldstring/newstring/标志位,标志位可以是如下的内容:

数字,表示第几次匹配替换。
g,就像上边全局替换的效果
p,进行打印
sed -n ‘command’ [FILE]…,会抑制打印
w file,将模式空间内容输出到file中。

数字

sed 's/:/!/2' sedplustest.txt可以把每行第2次匹配的:改成!
在这里插入图片描述
sed 's/:/!/6' sedplustest.txt可以把每行第6次匹配的:改成!
在这里插入图片描述

p打印

sed 's/a/!/p' sedplustest.txt会把匹配到内容的一行重复打印。
在这里插入图片描述

sed 's/a/!/' sedplustest.txt不管是否匹配到内容,都会输出每一行。sed -n 's/a/!/' sedplustest.txt不管是否匹配到内容都不会输出一行。sed -n 's/a/!/p' sedplustest.txt会把匹配内容的一行输出。p命令最好结合-n选项使用。
在这里插入图片描述

模式空间内容输出w file

sed -n 's/a/!/w record.txt' sedplustest.txt会把匹配到的第一处内容a替换成!,然后输出到record.txt里边。
在这里插入图片描述
sed -n 's/a/!/pw testpw.txt' sedplustest.txt会把匹配到的第一处内容a替换成!,然后输出到屏幕上和testpw.txt文件里。
在这里插入图片描述

sed -n 's/:/!/gpw testgpw.txt' sedplustest.txt会把匹配到的每行所有内容:替换成!,然后输出到屏幕上和testgpw.txt文件里。
在这里插入图片描述

寻址

寻址格式有以下格式:

/正则表达式/s/oldstring/newstring/标志位
行号s/oldstring/newstring/标志位,可以使用$表示最后一行
行号和正则表达式混用

/正则表达式/s/oldstring/newstring/标志位

sed '/^e/s/:/!/' sedplustest.txt可以把以e开头的一行先匹配,然后把已经匹配的行第一处匹配的:改成!
在这里插入图片描述

行号s/oldstring/newstring/标志位

sed '3s/:/!/' sedplustest.txt可以把第3行先匹配,然后把已经匹配的行第一处匹配的:改成!
在这里插入图片描述

行号和正则表达式混用

sed '/^e/,6s/:/!/' sedplustest.txt会匹配以e开始的行到第6行,然后把已经匹配的行第一处匹配的:改成!
在这里插入图片描述

分组

就是使用正则表达式匹配之后,执行多条命令,比如/正则表达式/{s/oldstring/newstring/标志位;s/oldstring/newstring/标志位
sed -n '/^e/{s/:/!/;s/e/a/2p}' sedplustest.txt可以把以e开始的行先匹配上,然后把匹配上的行先把第一处匹配的:改成!,然后再把第二处匹配的e改成a
在这里插入图片描述

sed脚本文件

echo '3s/:/!/' > sfile.sed3s/:/!/写入到sfile.sed中,然后sed -f sfile.sed sedplustest.txt使用sfile.sed的内容作为命令操作sedplustest.txt,把第三行的第一处匹配到的:替换成!
在这里插入图片描述

此文章为8月Day 8学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。

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

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

相关文章

docker部署

docker部署 1.Docker2.mysql5.73.Redis4.ES&Kibana&IK分词器 1.Docker Docker 安装官方文档:https://docs.docker.com/install/linux/docker-ce/centos/ 1.卸载之前的docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-com…

springboot工程使用阿里云OSS传输文件

在application.yml文件中引入对应的配置,一个是对应的节点,两个是密钥和账号,还有一个是对应文件的名称; 采用这样方式进行解耦,便于后期修改。 然后需要设置一个properties类,去读对应的配置信息 用到了…

Vue2源码分析-day2

实现数组的响应式原理 首先我们在index.html中定义一个数组,并且打印实例 const vm new MVue({data() {return {name: "zhangsan",age: "16",hobby:[zhangsan,lisi]}} }) console.log(vm);我们会发现定义的数组每一项都有get和set方法虽然数…

14.3.4 【Linux】使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率

想像一个情况,你有个目录未来会使用到大约 5T 的容量,但是目前你的磁盘仅有 3T,问题是,接下来的两个月你的系统都还不会超过 3T 的容量, 不过你想要让用户知道,就是他最多有 5T 可以使用就是了!…

并发多线程篇

线程的基础知识 面试题1:线程与进程的区别? 面试题2:并行和并发有什么区别? 面试题3:创建线程的方式有哪些? 面试题 4:runnable 和 callable 有什么区别? 面试题5:线程…

基于Centos7的Nginx源码安装

目录 1、准备安装环境 2、获取tar包: 3、解压创建软链接 4、创建用户和组 5、执行安装 6、创建服务脚本 7、开启nginx:​编辑​编辑 1、准备安装环境 yum insatall -y make gcc gcc-c pcre-devel #pcre-devel -- pcre库 #安装openssl-devel yum …

基于 CentOS 7 构建 LVS-DR 群集以及配置nginx负载均衡

目录 一、基于 CentOS 7 构建 LVS-DR 群集 1、前期准备 1、关闭防火墙 2、安装ifconfig 3、准备四台虚拟机 2、在DS上 2.1、配置LVS虚拟IP 2.2、手工执行配置添加LVS服务并增加两台RS 2.3、查看配置 3、在RS端(第三台、第四台) 上 3.1、配置W…

H7-TOOL的高速DAPLINK用于新版STM32CubeIDE V1.13及其以上版本的超简单实现方法(2023-08-08)

之前分享了一个方法,太繁琐了,H7-TOOL群的群友提供了一个方法,实现非常简单。1、使用STM32CubeMX或者自己创建一个STM32CubeIDE工程后,设置这两个地方即可: 配置调试器,设置完毕记得点击右下角的Apply 2、然…

【个人记录】CentOS7 编译安装最新版本Git

说明 使用yum install git安装的git版本是1.8,并不是最新版本,使用gitlab-runner托管时候会拉项目失败,这里使用编译源码方式安装最新版本的git。 基础环境安装 echo "nameserver 8.8.8.8" >> /etc/resolv.conf curl -o /…

Excel表格(一)

1.单一栏的宽度和高度设置 2.大标题的跨栏居中 3.让单元格内的文字------自动适应 4.序号递增 5.货币符号 6.日期格式的选择 选到单元格,选中对应的日期格式 7.自动求和的计算 然后在按住回车键即可求出当前行的金额 点击自动求和 8.冻结表格栏 9.排序 1.单栏排序 …

【性能类】—页面性能类

一、提升页面性能的方法有哪些? 1. 资源压缩合并,减少HTTP请求 图片、视频、js、css等资源压缩合并,开启HTTP压缩,把资源文件变小 2. 非核心代码异步加载 →异步加载的方式 → 异步加载的区别 异步加载的方式 ① 动态脚本加载…

【JavaWeb】 JavaScript 开发利器之 jQuery

🎄欢迎来到边境矢梦的csdn博文,本文主要讲解Java 中JavaScript 开发利器之 jQuery的相关知识🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下&#x1faf0…

QT信号与槽的理解

文章目录 信号与槽的理解 信号与槽的理解 信号就是事件,比如button被点击的事件,ComboBox选项改变的事件,都是信号槽就是对信号进行响应的函数,可以是任意自定义函数一个信号可以对应多个槽多个信号可以对应一个槽信号的参数不能…

提升Element UI分页查询用户体验与交互:实现修改未保存提示

我实现的功能是在 element ui 的分页组件中进行分页查询时,如果当前有未保存的修改数据就提示用户,用户可以选择是否放弃未保存的数据。确认放弃就重新查询数据;选择不放弃,不重新查询,并且显示条数选择框保持原样&…

AWS中lambda与DynamoDB的集成

前言:我在整个集成过程中,存在最大的问题有两个, 1. 没有考虑到lambda函数的权限,即对DynamoDB或者其他如Kinesis的权限授权,导致无法写入或者读取。 2.最初使用了异步方式调用,导致无法写数据到DynamoDB…

STM32自带的DSP库的滤波初体验(一)

最近在弄STM32自带的DSP库里的滤波,记录一下: arm_fir_instance_q15 instance_q15_S; #define NUM_TAPS 16 //滤波系数的个数 #define BLOCK_SIZE 32 q15_t firStateF32[BLOCK_SIZE NUM_TAPS]; q15_t Fir_Coeff[NUM_TAPS] {-79, -136, 312, 6…

《合成孔径雷达成像算法与实现》Figure3.1

代码复现如下: clc close all clear all%参数设置 B 5.80e6; %信号带宽 T 7.26e-6; %脉冲持续时间 K B/T; %线性调频频率 alpha 5; %过采样率 F alpha*B; %采样频率 N F*T; %采样点数 dt T/N; …

85. 最大矩形

题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1: 输入:matrix [["1","0","1","0","0"],["1…

Icon图标有哪些在线设计的工具推荐

虽然icon图标相对较小,但icon图标在设计中非常重要。高质量的icon图标通常可以决定设计工作的质量。高质量的在线生产icon工具可以提高设计师图标设计的效率。此外,优秀的图标设计师还可以让设计师快速开始图标设计工作。本文为您选择了五种在线生成icon…

python ffmpeg合并ts文件

当你从网站下载了一集动漫,然后发现是一堆ts文件,虽然可以打开,但是某个都是10秒左右,很不方便。 这时,可以用python合并ts文件。 (1)安装配置ffmpeg 官网下载ffmpeg-2023-08-07-git-d295b6b…