Linux文本三剑客-sed

一、sed介绍:

sed(Stream Editor)是一种流编辑器,用于对文本进行处理和转换。它可以从输入流中读取文本,并根据指定的规则进行编辑和替换。sed通常用于在命令行中进行文本处理,可以实现搜索、替换、删除、插入等操作。

工作流程:

seq 的工作流程主要包括读取执行显示三个过程。

默认情况下所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非使用 "sed -i" 修改源文件、或使用重定向输出到新的文件中。

二、基本用法:

 语法有如下三种:

sed [option]... 'script;script;...' [input  file...]选项         自身脚本语法         支持标准输入管道

选项:

-e   —— 用指定命令或者脚本来处理输入的文本文件,只有一个操作命令时省略,一般在执行多个操作命令使用-f    ——用指定的脚本文件来处理输入的文本文件
-n    ——不输出模式空间内容到屏幕,即不自动打印,可以与 p 命令一起使用完成输出-r  -E    ——使用扩展正则表达式
-h    ——显示帮助
-i    ——直接修改目标文件
-i.xxx    ——备份文件并原处编辑
-s    ——将多个文件视为独立文件,而不是单个连续的长文件流

操作符:

“操作”用于指定文件对操作的动作行为,也就是 sed 的命令。

通常情况下是采用的 “[n1[,n2]]” 操作参数的格式。n1、n2是可选的,代表选择进行操作的行数,如操作需要在5~20行之间进行,则表示为 “5,20 动作行为” 

s	替换,替换指定字符
d	删除,删除选定的行
a	增加,在当前行下方增加一行指定内容
i	插入,在选定行上方插入一行指定内容
c	替换,将选定行替换为指定内容
w	保存模式匹配的行至指定文件
r	读取指定文件的文本至模式空间中匹配的行后
y	字符转换,转换前后的字符长度必须相同
p	打印行内容。如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用
=	打印行号
l(小写L)	打印数据流中的文本和不可打印的ASCII字符(如结束符$  制表符\t)

脚本格式:

由 ‘地址+命令’ 组成

不给地址  对全文进行处理

单地址 : 

  数字    指定的数字行

  $        最后一行

地址范围:

x,x    从第x行到第x行     3,6  从第3行到第6行

x,+x   从x行到+x行      3,+4   从3行到第7行

/pat1/,/pat2/     第一个正则表达式和第二个正则表达式之间的行

步进  ~ :

1~2  奇数行

2~2  偶数行

n;打印下一行

1.打印内容 :

1.1打印全部内容:

sed ' '      #交互模式输入一行,自动打印一行相同的sed -n ' '   #交互模式输入一行,关闭自动打印sed -n ' p'  #加上p又恢复自动打印,与sed ' '相同

 1.2查看文件打印全部内容:

sed ' ' /etc/fstabsed -n ' p' /etc/fatab

1.3打印指定内容:

sed -n '4p' /etc/fstab
#打印第四行内容

1.4打印指定多行内容 :

ifconfig ens33 |sed -n '2,4p'
#打印网卡信息的2至4行cat -n /etc/passwd |sed -n '2,+4p'
#打印第2至6行,即第二行开始往后四行

 

 1.5打印多行内容后退出:

sed  '3q' /etc/passwd
#打印三行后退出

 1.6 打印最后一行,使用通配符$:

sed -n '$p' /etc/passwd

1.7 支持正则表达式,打印范围内容:

sed -n '//,//p' 文件名
#第一个//表示开头位置,第二个//表示结尾位置sed -n '/^r/,/^f/p' /etc/passwd
#以r开头 f开头结尾 第二轮以r开头 后面没有以f开头结尾 则显示全部

 1.8过滤关键字

sed -n '/root/p' /etc/passwd
#从第二行开始,找到root为止
sed -n '2,/root/p' /etc/passwd
#从第二行开始,找到root为止

1.9 打印奇数偶数行:

seq 10 |sed -n '1~2p'
seq 10 |sed '2~2d'
#打印奇数行seq 10 |sed -n '2~2p'
seq 10 |sed '1~2d'
#打印偶数行 

1.10 指定r开头f结尾的行:

1.11 打印某个时间段的文件:

2.插入内容: 

2.1在指定行下方增加一行指定内容: 

2.2 在指定行下方\n插入内容:

2.3 在指定行前插入内容:

 

2.4 将seq2.txt文件内容放到第二行后面:

3.删除内容:

3.1删除指定行:
#删除指定行并不是真正删除,只是将删除了的结果显示出来,并不是真正删除了
cat 1.txt |sed '3d'
#删除第三行并显示出来

3.2 指定删除多行:
sed '2,4d' seq.txt 
#删除连续的2到4行

3.3删除空行:
sed '/^$/d' 文件名

3.4删除以指定字符结尾的行:
sed '/nologin$/!d' /etc/passwd
#删除不是以nologin结尾的行

 

3.5备份在删除:
sed -i.bak '3d' 1.txt
#原文件删除第三行,并原文备份

 

查看备份文档:

 

4. 替换内容: 

4.1在指定行下方替换指定内容:  

 

5.! 取反:

 

6.显示内容: 

6.1换行显示行号:

6.2显示第二行内容:

三、搜索替代:

格式:

sed 行范围 s/旧字符串/新字符串/替换标记
替换标记:数字:表明新字符串将替换第几处匹配的地方g : 表明新字符串将会替换所有匹配的地方p : 打印与替换命令匹配的行,与 -n 一起使用w 文件 :将替换的结果写到文件中& 指代之前找到的内容

 1.修改selinux开机不自启配置文件:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 

2.修改多行,使用r 以及-e

sed -ri -e 's/SELINUX=disabled/SELINUX=enabled/' /etc/selinux/config  -e 's/SELINUXTYPE=targeted/SELINUXTYPE=111/' /etc/selinux/config 

1.2修改全局,后面加g

sed -i 's/root/admin/g' /etc/passwd 
#将全局出现的root修改为admin

1.3 指代变量:

&指代之前找到的内容

四、分组调用:

1.调用分组段:

#分组使用()(),调用第一段使用\1
echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1/'#调用第2个分组
echo 11aaxx |sed -r 's/(11)(aa)(xx)/\2/'#调用所有分组
echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1\2\3/'

2.提取ip地址:

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

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

相关文章

Vmware 无法开启虚拟化解决方法

最近遇到了Vmware无法开启虚拟化的问题,已经解决,记录一下解决经过。 我遇到的情况是BIOS已经开启虚拟化,HV服务也停用了,但是Vmware仍然提示模块“VPMC”启动失败。网上的解决方案千篇一律,基本都是排查BIOS、停用Windows的虚拟化功能、停用HV主机服务、Vmware配置中关闭…

【开源】SpringBoot框架开发天然气工程运维系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司(施工单位)功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

如何快速将 HTML 文件转换为 PDF

HTML表格是一种在网页上显示数据的通用且强大的方式。它们可用于创建简单的表(例如日历)或更复杂的表(例如数据网格)。在这篇博文中,我们将逐步学习如何在 C# 中创建 HTML 表格。本指南将为您提供在 C# 中有效创建 HTM…

阿里云服务器一键部署幻兽帕鲁专属服务器,图形化可视化修改游戏参数是如此简单!

幻兽帕鲁这款游戏最近很火,在线玩家太多了,官方服务器也是承压巨大,很多玩家现在都是搭建自己的专属幻兽帕鲁服务器来玩。搭建教程现在也是越来越简单了,可以说是真正的零基础,一看就会,并且开箱即玩&#…

【python】在python中使用单元测试unittest

在python中使用单元测试unittest 大家好,欢迎来到我的技术乐园!今天,我们将一起踏入Python单元测试的奇妙旅程,探索这个让我们的代码更可靠、更强壮的令人愉快的世界。 前言:为什么单元测试如此重要? 在我…

鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

在2023年云栖大会上,阿里云数据库产品事业部负责人李飞飞在主题演讲中提到,瑶池数据库推出“DB存储”一体化能力,结合人工智能、机器学习、存储等方法和创新能力,实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的…

01神经网络的理论及实现

感知机的缺点就是需要设置合适的权重,而权重的设置都是人工操作的。 1、从感知机到神经网络 重新画出感知机的模型,在图上加上偏置,由于偏置始终为1,所以颜色加深。 图1-1 感知机模型 引入新函数(激活函数)&#xff…

2024前端面试题汇总

2024前端面试题汇总 1、全局变量与局部变量2、Vue3 区分ref 与 reactive 的原因3、关于服务端渲染(SSR)与客户端渲染(CSR)的理解4、单页面应用(SPA)与多页面应用(MPA)的优劣5、Vue2 …

计算机二级Python选择题考点——Python语言程序设计Ⅱ

代码1&#xff1a; def fibRate(n):if n < 0:return -1elif n 1:return -1elif n 2:return 1else:L [1,5]for i in range(2,n):L.append(L[-1] L[-2])return L[-2] % L[-1] print(fibRate(7))n 7 L [1,5] i 2 , 3 , 4 , 5 , 6 i 2 -> L[-1] L[-2] 5 1 6 -&g…

Linux逻辑卷(LV)扩容

Linux逻辑卷&#xff08;LV&#xff09;扩容 1、准备物理磁盘&#xff08;分区和不分区都行&#xff09;&#xff0c;可以使用lsblk命令查看新增的磁盘&#xff0c;如下图sde就是我们新增磁盘&#xff0c;容量为600G。 2、将新磁盘变成物理卷&#xff08;PV&#xff09; pvcr…

缓存的概念

文章目录 一、系统缓存buffer与cachecache 的保存位置cache 的特性 二、用户层缓存DNS缓存 三、浏览器缓存过期机制最后修改时间Etag标记过期时间 expires混合使用和缓存刷新缓存刷新 cookie和session 四、CDN缓存什么是CDN用户请求CDN流程利用 302 实现转发请求重定向至最优服…

RabbitMQ 死信队列应用

1. 概念 死信队列&#xff08;Dead Letter Queue&#xff09;是在消息队列系统中的一种特殊队列&#xff0c;用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”&#xff0c;例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时&#xff0c;…

【数据分享】1929-2023年全球站点的逐月最高气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

Leetcode1109. 航班预订统计

Every day a Leetcode 题目来源&#xff1a;1109. 航班预订统计 解法1&#xff1a;差分数组 注意到一个预订记录实际上代表了一个区间的增量。我们的任务是将这些增量叠加得到答案。因此&#xff0c;我们可以使用差分解决本题。 代码&#xff1a; /** lc appleetcode.cn i…

asp.net core监听本地ip地址

开发asp.net core的时候遇到一个问题我想提供访问供其他同事测试&#xff0c;但是默认都是localhost或者127.0.0.1。我想换成我的Ip地址访问但是不行&#xff0c;百度搜索需要更换监听的地址即修改launchSettings.json&#xff0c;修改为0.0.0.0:5248&#xff0c;这样不管local…

力扣hot100 跳跃游戏 II 贪心 思维

Problem: 45. 跳跃游戏 II 思路 &#x1f468;‍&#x1f3eb; 参考 每次在上次能跳到的范围&#xff08;end&#xff09;内选择一个能跳的最远的位置&#xff08;也就是能跳到max_far位置的点&#xff09;作为下次的起跳点 &#xff01; Code ⏰ 时间复杂度: O ( n ) O(n…

DVI接口主机连接VGA显示器解决方案:DVI转VGA转换器DV

DVI转VGA转换器概述 DVI转VGA转换器能够将DVI数字信号转换成VGA模拟信号&#xff0c;通过VGA线缆传输给VGA显示设备使用&#xff0c;这样就能实现DVI接口主机连接VGA接口的显示器。 DVI转VGA转换器DV DVI转VGA转换器DV接口说明 DVI转VGA转换器DV接口介绍 DVI转VGA转换器连接示…

Spring Boot集成RocketMQ

本文目的是&#xff1a;教会你使用Spring Boot集成RocketMQ。 pom.xml文件引入rocketMQ依赖 <!-- rocketmq 依赖--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId>&…

XCTF:warmup[WriteUP]

CtrlU查看页面源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…