sed
1、sed的定义
sed是一种流编辑器,按行处理,一次处理一行内容
处理方式:如果只是展示,会放在缓冲区(模式空间),展示结束后,会从模式空间把操作结果删除
一行一行处理,处理完当前行才会处理下一行,直到文件末尾。
作用:对文本的内容进行增删改查,最好用的是改和增
2、sed的命令格式和操作选项
sed -e ‘操作符’ -e '操作符' 文件1 文件2
-e表示可以跟多个操作符,只有一个操作,-e可以省略
sed -e '操作符1;操作符2' 文件 文件2
2.1选项
-e:用于执行多个操作命令
-f:在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作
-i:直接修改目标文件(慎用)
-n:仅显示script处理后的结果(不加-n,sed会有两个输出结果,加了-n就会把默认输出屏蔽,只显示一个结果)
2.2操作符
p:打印结果
r:使用扩展正则表达式
s:替换,替换字符串
c:替换,替换行
y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致
d:删除,删除行
a:增加,在指定行的下一行插入内容
i:增加,在指定行的上一行插入内容
r:在行后增加文本内容(将读取的文件内容添加到对象文件中)
$a:在最后一行插入新的内容
$i:在倒数第二行插入新的内容
$r:读取其他文件的内容,然后插入到对象文件的最后一行
3、sed的打印功能
3.1寻址打印
sed -n '=' 只显示行号
[root@test1 opt]# sed -n '=' test1.txt
1
2
3
4
sed -n '=;p' 既显示行号又显示内容
[root@test1 opt]# sed -n '=;p' test1.txt
1
aaa
2
bbb
3
ccc
4
ddd
5
eee
6
fff
7
ggg
8
hhh
9
iii
打印指定的行:sed -n '4p'
[root@test1 opt]# sed -n '4p' test1.txt
ddd
打印最后一行:sed -n '$p'
[root@test1 opt]# sed -n '$p' test1.txt
iii
3.2行号范围打印
打印2-4行:sed -n ‘2,4p’
[root@test1 opt]# sed -n '2,4p' test1.txt
bbb
ccc
ddd
打印2-最后一行:sed-n ‘2,$p’
[root@test1 opt]# sed -n '2,$p' test1.txt
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
打印第2行和最后一行:sed-n ‘2p;$p’
[root@test1 opt]# sed -n '2p;$p' test1.txt
bbb
iii
3.3打印奇数行和偶数行
奇数行:sed-n ‘p;n’
n的作用,跳过一行,打印下一行
[root@test1 opt]# sed -n 'p;n' test1.txt
aaa
ccc
eee
ggg
iii
偶数行:sed-n ‘n;p’
[root@test1 opt]# sed -n 'n;p' test1.txt
bbb
ddd
fff
hhh
4、对文本内容进行过滤
sed -n '/a/p' 过滤并打印包含a的行
[root@test1 opt]# sed -n '/a/p' test1.txt
aaa
cacc
eeae
fffa
使用正则表达式对文本内容进行过滤
sed -n '/^root/p' /etc/passwd 打印以root为开头的行
[root@test1 opt]# sed -n '/^root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sed -n '33,/bash$/p'从指定行开始,打印到第一个以bash为结尾的行
[root@test1 opt]# sed -n '33,/bash$/p' /etc/passwd
geoclue:x:992:986:User for geoclue:/var/lib/geoclue:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sssd:x:991:985:User for sssd:/:/sbin/nologin
……
打印至少有两个99:的行
[root@test1 opt]# sed -rn '/(99:){2,}/p' /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
要么以root为开头,要么以bash为结尾的行
[root@test1 opt]# sed -rn '/^root|bash$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
test1:x:1000:1000:test1:/home/test1:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash
test2:x:1011:1011::/home/test2:/bin/bash
面试题:如何免交互删除文本内容,不删除文件
sed -i ‘d’ 文件名
cat /dev/null > 文件名
5、sed的删除操作
sed -n '3d;p' 删除第三行,打印剩余的行
[root@test1 opt]# sed -n '3d;p' test1.txt
111
222
444
555
666
777
888
999
000
sed -n '5,$d;p' 删除第五行到最后一行,打印剩余的行
[root@test1 opt]# sed -n '5,$d;p' test1.txt
111
222
333
444
sed -n '1!d;p' 除了第一行其他的都删除
[root@test1 opt]# sed -n '1!d;p' test1.txt
111
sed -n ‘4,6!d;p’ 除了第四行到第六行,其他的都删除
[root@test1 opt]# sed -n '4,6!d;p' test1.txt
444
555
666
sed -n '4d;6d;p' 除了第四行和第六行,其他的都打印
[root@test1 opt]# sed -n '4d;6d;p' test1.txt
111
222
333
555
777
888
999
000
sed -i -e '1,3d' 除了第四行和第六行,其他的都删除
[root@test1 opt]# sed -i -e '1,3d' -e '5d' -e '7,$d' test1.txt
[root@test1 opt]# cat test1.txt
444
666
6、匹配字符串进行删除行
sed '/a/d' 删除所有包含a的行
[root@test1 opt]# sed '/a/d' test1.txt
bhdbh nj
hx sjdh
wud ndhcbdh dd
面试题:如何免交互删除空行?
sed '/^$/d' 文件名
cat 文件名 | tr -s "\n"
grep -v "^$" 文件名
7、s替换字符串
sed -n 's/root/test/p' 把root替换成test(只替换第一个root)
[root@test1 opt]# sed -n 's/root/test/p' /etc/passwd
test:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
sed -n 's/root/test/gp' 把所有的root都替换成test
[root@test1 opt]# sed -n 's/root/test/gp' /etc/passwd
test:x:0:0:test:/test:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
sed -n 's/^/#/p' 每一行都加#注释掉
[root@test1 opt]# sed -n 's/^/#/p' test1.txt
#111
#222
#333
#444
#555
#666
#777
#888
#999
#000
注释第四行到第六行
[root@test1 opt]# sed -n '4,6 s/^/#/p' test1.txt
#444
#555
#666
注释第四行和第六行
[root@test1 opt]# sed -n '4,6 s/^/#/p' test1.txt
#444
#555
#666
8、对字母进行大小写替换
8.1小写替换成大写
sed 's/[a-z]/\u&/' 文件名 首字母变成大写
u&转换首字母大写的特殊符号,\转义符
[root@test1 opt]# sed 's/[a-z]/\u&/' test1.txt
Aaa
Bbb
Ccc
Ddd
sed 's/[a-z]/\u&/g' 文件名 把所有的小写都变成大写
[root@test1 opt]# sed 's/[A-Z]/\l&/' test1.txt
aAA
bBB
cCC
dDD
8.2大写替换成小写
sed 's/[A-Z]/\l&/' 文件名 首字母变成小写
[root@test1 opt]# sed 's/[A-Z]/\l&/' test1.txt
aAA
bBB
cCC
dDD
sed 's/[A-Z]/\l&/g' 文件名 把所有的小写都变成小写
[root@test1 opt]# sed 's/[A-Z]/\l&/g' test1.txt
aaa
bbb
ccc
ddd
9、整行替换
sed '/原内容/c 替换内容' 文件名
面试题:替换ip地址
原ip地址:IPADDR=192.168.230.10
替换之后的ip地址:IPADDR=192.168.230.100
[root@test1 opt]# sed '/IPADDR=192.168.230.10/c IPADDR=192.168.230.100' /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.230.100
NETMASK=255.255.255.0
GATEWY=192.168.230.2
DNS1=218.2.135.1
10、y单字符替换
把one替换成123,替换的字符串长度要相同
[root@test1 opt]# sed 'y/one/123/' test1.txt
123
tw1
thr33
f1ur
fiv3
six
s3v32
3ight
2i23
t32
11、使用sed对字符串和字符的位置进行互换
字符串互换位置
[root@test1 opt]# echo abc | sed -r 's/(a)(b)(c)/\3\1\2/'
cab
单个字符互换位置
[root@test1 opt]# echo 早上好 | sed -r 's/(.)(.)(.)/\3\2\1/'
好上早
面试题1:提取出文本的型号
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar
方法1:
[root@test1 opt]# cat lianxi.txt | grep -E "[0-9]+\."
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar
方法2:
[root@test1 opt]# cat lianxi.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
1.9.7
1.9.7
2.7.7
3.4
1.0
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5
面试题2:
打印指定时间内的日志
[root@test1 opt]# sed -n '/Jun 17 10:50:01/,/Jun 17 11:40:01/p' /var/log/messages
Jun 17 10:50:01 test1 systemd: Started Session 74 of user root.
Jun 17 11:00:01 test1 systemd: Started Session 75 of user root.
Jun 17 11:01:01 test1 systemd: Started Session 76 of user root.
Jun 17 11:10:01 test1 systemd: Started Session 77 of user root.
Jun 17 11:13:26 test1 chronyd[8756]: Selected source 185.209.85.222
Jun 17 11:20:01 test1 systemd: Started Session 78 of user root.
Jun 17 11:22:01 test1 systemd: Removed slice User Slice of root.
Jun 17 11:30:01 test1 systemd: Created slice User Slice of root.
Jun 17 11:30:01 test1 systemd: Started Session 79 of user root.
Jun 17 11:30:01 test1 systemd: Removed slice User Slice of root.
Jun 17 11:40:01 test1 systemd: Created slice User Slice of root.
Jun 17 11:40:01 test1 systemd: Started Session 80 of user root.
Jun 17 11:40:01 test1 systemd: Removed slice User Slice of root.
相关文章:
sed
1、sed的定义 sed是一种流编辑器,按行处理,一次处理一行内容 处理方式:如果只是展示,会放在缓冲区(模式空间),展示结束后,会从模式空间把操作结果删除 一行一行处理,处…...
C++一文讲透thread中的detach和join的差别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、thread详解二、线程何时运行三、线程启动方式1.join2.detach 总结 前言 无论哪种语言线程在绝大多数项目中都是会用到的,C也一样,C…...
当Windows台式电脑或笔记本电脑随机关机时,请先从这8个方面检查
序言 你的Windows笔记本电脑或PC是否意外关闭?笔记本电脑电池故障、电源线松动、过热、电源设置错误、驱动程序过时或电脑组件故障等问题都可能是罪魁祸首。如果你对这个问题感到沮丧,试试这些解决方案。 进行一些初步检查 与从电池中获取电力的笔记本电脑不同,台式电脑依…...
【凤凰房产-注册安全分析报告-缺少轨迹的滑动条】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
【建议收藏】逻辑回归面试题,机器学习干货、重点。
. . . . . . . . . . .纯 干 货 . . . . . . . . . . . .今天是机器学习面试题,16大块的内容,124个问题总结的第二期:逻辑回归面试题。 逻辑回归是一种用于解决分类问题的统计学习方法,尤其在二分类…...
C++使用教程
目录 一、软件使用 二、C基础规则补充 关键字 整型取值范围 浮点型取值范围 字符型使用规则 字符串型使用规则 布尔类型 常用的转义移字符 三、数组、函数、指针、结构体补充 1.数组 2.函数 声明: 分文件编写: 值传递: 3.指…...
k8s volcano + deepspeed多机训练 + RDMA ROCE+ 用户权限安全方案【建议收藏】
前提:nvidia、cuda、nvidia-fabricmanager等相关的组件已经在宿主机正确安装,如果没有安装可以参考我之前发的文章GPU A800 A100系列NVIDIA环境和PyTorch2.0基础环境配置【建议收藏】_a800多卡运行环境配置-CSDN博客文章浏览阅读1.1k次,点赞8…...
设计模式(七)创建者模式之建造者模式
这里写目录标题 概述需求需求类图BikeBuilderMobikeBuilderOfoBuilderDirectorClientClient优缺点使用场景 模式扩展ComputerClient创建者模式对比工厂方法模式VS建造者模式抽象工厂模式VS建造者模式 总结 概述 建造者模式又叫生成器模式,是一种对象构建模式。它可…...
# class中的__call__方法解析
class中的__call__方法解析 文章目录 class中的__call__方法解析1. 为什么要有call,什么情况下用call?1.1 为什么要有 __call__ 方法1.2 没有 __call__ 方法是否可以1.3 使用 __call__ 方法的典型场景1.3.1 示例1:简单函数对象1.3.2 示例2&am…...
React逻辑复用的方式都有哪些
在日常开发中,能够优雅的复用组件和逻辑,是优秀开发者的职责。在react中,复用逻辑的方式有很多,可以适用于不同的业务场景。今天说三个比较有代表性的,Render Props、HOC、Hooks Render Props 创建一个接受函数作为其…...
【LinuxC语言】线程重入
文章目录 前言线程重入是什么线程重入实现示例代码总结前言 在并发编程中,我们经常需要处理多个线程同时访问和修改共享资源的问题。这可能会导致数据竞争和状态不一致,从而使程序的行为变得不可预测。为了解决这个问题,我们引入了一种称为“线程重入”的机制。线程重入,或…...
【Streamlit学习笔记】Streamlit-ECharts箱型图添加均值和最值label
Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件,用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制箱型图展示 在基础箱型…...
Docker镜像仓库:存储与分发Docker镜像的中央仓库
探索Docker镜像仓库:存储与分发Docker镜像的中央仓库 如果你是Docker的新手,或者已经在使用Docker但还不太了解Docker镜像仓库,那么这篇博客将是你的最佳指南。我们将从基础概念开始,逐步深入,帮助你全面掌握Docker注…...
FreeRTOS必考面试题及参考答案
什么是RTOS?FreeRTOS是什么?它主要应用于哪些领域? RTOS,即实时操作系统(Real-Time Operating System),是一种专门为实时应用程序设计的操作系统,它强调的是对外部事件的快速响应和可预测性。实时系统通常要求在严格的时限内完成关键任务,因此RTOS具备优先级调度、确…...
面试题2:从浏览器输入一个URL,到最终展示前端页面这一过程,会发生什么?
这是一个高频的面试题目。 题目答案是开放性的,一般以后端开发的角度回答。 当地址栏输入一个 URL 后: 一、首先会进行 DNS 域名解析 DNS 域名解析:网络上的设备都是通过 IP 地址,作为身份标识的。但是由于点分十进制的 IP 地址 …...
<Rust><iced><resvg>基于rust使用iced构建GUI实例:使用resvg库实现svg转png
前言 本文是使用rust库resvg来将svg图片转为png图片。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:resvg 代码分析 resvg是一个基于rust的svg渲染库,其官方地址: An SVG rendering li…...
面试突击:Java 中的泛型
本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。今天想和大家聊聊 Java 中的泛型。 什么是泛型? Java 泛型(Generics) 是 JDK 5…...
3_2、MFC常用控件用法:组合框、滚动条和图片控件
MFC控件用法 1、组合框1.1 简介1.2 创建CComboBox类的主要成员函数 1.3 实例 2、滚动条控件2.1 简介2.2 创建CScrollBar类的主要成员函数 2.3 实例 3、图片控件3.1 简介3.2 创建图片控件静态加载图片图片控件动态加载图片 1、组合框 1.1 简介 组合框其实就是把一个编辑框和一…...
如何使用gprof对程序进行性能分析
如何使用gprof对程序进行性能分析 目录 1 gprof概述 2 gprof原理简述 3 gprof使用 3.1 gprof使用简述 3.2 gprof使用示例 4 小结 1 gprof概述 gprof 是 一个 GNU 的程序性能分析工具,可以用于分析C\C程序的执行性能。gprof工具可以统计出各个函数的调用次数、执…...
四川汇聚荣科技有限公司靠谱吗?
在如今这个信息爆炸的时代,了解一家公司是否靠谱对于消费者和合作伙伴来说至关重要。四川汇聚荣科技有限公司作为一家位于中国西部地区的企业,自然也受到了人们的关注。那么,这家公司究竟如何呢?接下来,我们将从多个角度进行深入…...
可灵王炸更新,图生视频、视频续写,最长可达3分钟!Runway 不香了 ...
现在视频大模型有多卷? Runway 刚在6月17号 发布Gen3 ,坐上王座没几天; 可灵就在6月21日中午,重新夺回了王座!发布了图生视频功能,视频续写功能! 一张图概括: 二师兄和团队老师第一…...
oracle中使用临时表GLOBAL TEMPORARY TABLE
需要在存储过程中返回一个临时结果集,这个结果集又是多个语句通过循环查询出来的,这时候就想到了将结果插入到临时表中,然后返回临时表的数据的思路,于是有了以下操作: 1.创建临时表 -- Create table create global …...
Gradio入门—快速开始
目录 安装构建您的第一个演示分享您的演示核心 Gradio 课程聊天机器人gr.ChatInterface自定义演示gr.BlocksGradio Python 和 JavaScript 生态系统 Gradio 是一个开源 Python 软件包,可让您快速为机器学习模型、API 或任何任意 Python 函数构建演示或 Web 应用程序。…...
AOP应用之系统操作日志
本文演示下如何使用AOP,去实现系统操作日志功能。 实现步骤 引入AOP包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.6.6</version></de…...
海外云手机自动化管理,高效省力解决方案
不论是企业还是个人,对于海外社媒的营销都是需要自动化管理的,因为自动化管理不仅省时省力,而且还节约成本; 海外云手机的自动化管理意味着什么?那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…...
后仿真中的 《specify/endspecify block》之(5)使用specify进行时序仿真
前面我们学习了specify...endspecify 具体是什么东西。今天,我们使用specify block 中定义的延时,来进行一次仿真。看看到底是背后如何运转的呢。 一 基本例子 一个用 specify 指定延迟的与门逻辑描述如下: module and_gate(output Z,input A, B);assign Z = A & …...
win10/11磁盘管理
win10/11磁盘管理 合并磁盘分区的前提是你的两个磁盘区域是相邻的,比如如下: 如果需要吧这个磁盘进行分解,你可以选择压缩一部分磁盘或者是直接删除卷 我这里的话,因为压缩出来的卷和C盘好像是不相邻的(我之前做过&…...
【昇思初学入门】第四天打卡
数据变换Transforms 心得体会 MindSpore提供了丰富的数据变换工具,针对图像数据可以使用如Rescale、Normalize和HWC2CHW等,且使用Compose类允许我们定义一个变换序列,并将它们作为一个整体应用到数据上。 composed transforms.Compose([v…...
禁用/屏蔽 Chrome 默认快捷键
Chrome 有一些内置的快捷键,但是它并没有像其他软件一样提供管理快捷键的界面。在某些时候,当我们因为个人需求希望禁用 Chrome 某些快捷键时,又无从下手。 好在有开发者开发了 Chrome 插件,可以禁用 Chrome 快捷键的插件&#x…...
移动端+PC端应用模式的智慧城管综合执法办案平台源码,案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析
城市管理综合执法管理平台实现执法办案、业务全流程在线办理,依托移动端PC端的“两端”应用模式,保障能够通过信息化手段进行日常的执法办案工作,强化执法监督功能。提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析等功能&a…...
深圳ui设计师工资/搜索引擎推广和优化方案
来自:http://jishus.org/?p467#more-467很多学习C的人其实都是从Dev C开始的,因為VC对一般初新者而言方便是方便,但無法学习到標準的C語言(ANSI C),原因就是VC裡面有太多的函式是屬於.NET的,如果改用其他編…...
网站开发与制作/推广团队在哪里找
策略模式 class Context { public:Strategy strategy;Context (Strategy& strategy){this.strategy strategy;}void ContextInterface(){strategy.AlgorithmInterface();} }装饰模式 把类中的装饰功能从类中搬移去除,这样可以简化原有的类。把每个要装饰的功能…...
北京宣传片制作公司/西安seo网站排名
使用组策略进行软件升级 升级包括强制升级和可选升级,强制升级就是强制用户卸载已经安装的旧版本软件,安装新版软件。可选升级就是保留旧版本的情况下安装新版本。 本示例演示强制升级部署给用户的画图软件。 任务: u 配置组策略使用版本2升级…...
选服务好的网站建设/网站数据统计
php&mysql实现登录注册环境数据库文件结构步骤代码login.htmlregistor.htmllogin.phpregistor.phpapidoc.md效果环境 数据库 文件结构 必须要注意,文件夹必须放在服务器上,然后才能运行。 步骤 在服务器上新建一users个文件夹,然后新建…...
网站建设费钱吗/广州网络运营课程培训班
2019独角兽企业重金招聘Python工程师标准>>> OSChina 不支持 md,附上图片如下,github 地址: https://github.com/samuelzuuka/buildfuture-simple-template BuildFuture This Article is composed by Samuel Zuuka, anyone is fr…...
建立网站目的/互联网产品推广是做什么的
1. 安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2. 发送请求 Postman最基础的功能就是发送http请求,支持GET/PUT/POST/DELETE,还有很多我不认识的http方法。 通过填写URL、header、body等就可以发送一个请求…...