36 - shell之sed

news2024/11/29 6:28:08

sed

grep就是查找文本当中的内容,扩展正则表达式。

一、sed

1.1、sed的定义

sed是一种流编辑器,一次处理一行内容。

如果只是展示,会放在缓冲区(模式空间),展示结束,会从模式空间把结果删除。

一行一行处理,处理完当前行,才会处理下一行,直到文件末尾。

1.2、sed的命令格式和操作选项:

sed -e ‘操作符’ -e ‘操作符’ 文件1 文件2

-e表示可以跟多个操作符,只有一个操作,-e可以省略,这里的-e是指定操作。

sed -e ‘操作符1;操作符2’ 文件1 文件2

1.2.1、选项:

-e:用于执行多个操作

-f :在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作。

-i :直接修改目标文件(慎用)

-n:仅显示script处理后的结果(不加-n,sed会有两个输出结果,加了-n就会把默认输出屏蔽,只显示一个结果)。

1.2.2、操作符:

p:打印结果

r:扩展正则表达式

s:替换,替换字符串

c:替换,替换行

y:替换,替换单个字符串,多个字符替换必须和替换内容的字符长度保持一致。

d:删除,删除行

a:增加,在指定行的下一行插入内容

[root@localhost opt]# cat -n test1 | sed '/ddd/a aa'

i:增加 ,在指定行上一行插入内容

[root@localhost opt]# cat -n test1 | sed '/ddd/i aa'

r:插入文本内容

[root@localhost opt]# cat -n test1 | sed '/ddd/r test2' 

$a:在最后一行下一行,插入新的内容

[root@localhost opt]# cat -n test1 | sed '$a sdsddsds12343' 

$i:在最后一行上一行,插入新的内容

[root@localhost opt]# cat -n test1 | sed '$i sdsddsds12343' 

$r:在最后一行下一行,插入文本内容

[root@localhost opt]# cat -n test1 | sed '$r test2' 

1.2.3、打印功能:

1.2.3.1、寻址打印

行号打印

[root@localhost opt]# sed -n '=;p' test1

打印第四行

[root@localhost opt]# sed -n '4p' test1

打印最后一行

[root@localhost opt]# sed -n '$p' test1

显示行号

[root@localhost opt]# cat -n test1 | sed -n 'p' 
1.2.3.2、行号范围打印

打印第二到最后一行

[root@localhost opt]# sed -n '2,$p' test1

打印第二,最后一行

[root@localhost opt]# sed -n '2p;$p' test1
123
ddd

打印奇数行和偶数行

打印偶数行,n跳过第一行

[root@localhost opt]# cat -n test1 | sed -n 'n;p'

打印奇数行,n跳过第一行

[root@localhost opt]# cat -n test1 | sed -n 'p;n' 

n的作用,跳过一行,打印下一行。

1.2.4、文本内容进行过滤

过滤并打印包含o的行,/过滤内容/

[root@localhost opt]# cat -n test1 | sed -n '/z/p'         ##/过滤内容/
    13	zzz
    26	zzz

使用正则表达式对文本内容进行过滤

[root@localhost opt]# cat /etc/passwd | sed -n '/^a/p' 
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin

从指定行开始,打印到第一个以bash为结尾的行

[root@localhost opt]# cat /etc/passwd | sed -n '3,/bash$/p'

扩展正则表达式

image-20240621101128472
[root@localhost opt]# cat /etc/passwd | sed -rn '/(99:){2,}/p' 
nobody:x:99:99:Nobody:/:/sbin/nologin

要么以root开头,要么以bash结尾

[root@localhost opt]# cat /etc/passwd | sed -rn '/\broot|bash\b/p' 

面试题1:

如何免交互删除文本内容。不删除文件

sed 删除文件内容

[root@localhost opt]# sed -i 'd' test2
[root@localhost opt]# cat test2
[root@localhost opt]# 

cat /dev/null 删除文件内容

[root@localhost opt]# cat test2
12
ew

ds

dds
f
d
fd
f
g

[root@localhost opt]# cat /dev/null > test2
[root@localhost opt]# cat test2

sed的删除操作

删除指定行

[root@localhost opt]# cat -n test1 | sed -n '3d;p' 
     1	123
     2	123
     4	345

删除25到最后一行

[root@localhost opt]# cat -n test1 | sed -n '25,$d;p' 

删除指定x行

[root@localhost opt]# cat -n test1 | sed -n 'x!d;p' 

除了4-6行,其他全部删除

[root@localhost opt]# cat -n test1 | sed -n '4,6!d;p' 
     4	345
     5	345
     6	 

在这里插入图片描述

匹配字符串删除行

在这里插入图片描述

在这里插入图片描述

面试题2:

如何免交互的方式删除空行:

在这里插入图片描述

[root@localhost opt]# grep -v "^$" test1

[root@localhost opt]# cat test1 | tr -s "\n"

[root@localhost opt]# sed '/^$/d' test1

s替换字符串----加g全部替换

sed -n ‘s/需要替换/替换成/gp’

[root@localhost opt]# cat /etc/passwd | sed -n 's/root/test/p'  
test:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
[root@localhost opt]# cat /etc/passwd | sed -n 's/root/test/gp'  
test:x:0:0:test:/test:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
[root@localhost opt]# cat -n test1 | sed -n 's/^/#/gp'  

#     1	123

#     2	

#     3	

#     4	123
[root@localhost opt]# cat -n test1 | sed -n '4p;5p' | sed -n 's/^/#/gp'  
                              
#     4	123                ##打印后注释

#     5	
[root@localhost opt]# cat -n test1 | sed -n '4s/^/#/gp;6s/^/#/gp'  

#     4	123

#     6	123

首字母变大写------加g是全部

[root@localhost opt]# cat -n test1 | sed 's/[a-z]/\u&/' 

u&转换首字母大写的特殊符号,\转义符。

[root@localhost opt]# cat -n test1 | sed 's/[a-z]/\u&/g'  
    12	234
    13	345
    14	AAA
    15	BBB
    16	ZZZ
    17	QQQ
    18	QQQ
    19	ZZZ
    20	SSS
    21	AAA
    22	DDD
    23	DDD123
    24	345
    25	234

首字母变小写—加g是全部

l&转换首字母大写的特殊符号,\转义符。

[root@localhost opt]# cat -n test1 | sed 's/[A-Z]/\l&/g'  
    13	345
    14	aaa
    15	bbb
    16	zzz
    17	qqq
    18	qqq
    19	zzz
    20	sss
    21	aaa
    22	ddd
    23	ddd123
    24	345
    25	234
    26	345
    27	aaa
    28	bbb
    29	zzz
    30	zzz
    31	sss
    32	aaa


整行替换:

[root@localhost opt]# cat -n test1 | sed '/123/c dn zhen de shuai'
[root@localhost opt]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 | sed '/IPADDR=192.168.168.10/c /IPADDR=192.168.168.100'
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
/IPADDR=192.168.168.100

y,单字符替换

[root@localhost opt]# cat -n test1 | sed 'y/abc/678/'

r:插入文本内容

[root@localhost opt]# cat -n test1 | sed '/ddd/r test2' 

$a:在最后一行下一行,插入新的内容

[root@localhost opt]# cat -n test1 | sed '$a sdsddsds12343' 

$i:在最后一行上一行,插入新的内容

[root@localhost opt]# cat -n test1 | sed '$i sdsddsds12343' 

$r:在最后一行下一行,插入文本内容

[root@localhost opt]# cat -n test1 | sed '$r test2' 

使用sed对字符串和字符的位置进行互换。

[root@localhost opt]# echo chengqianshuai | sed -r 's/(cheng)(qian)(shuai)/\3\1\2/'
shuaichengqian

字符位置互换----使用.任意单字符代替

[root@localhost opt]# echo cheng | sed -r 's/(.)(.)(.)(.)(.)/\4\5\3\1\2/'
ngech

在这里插入图片描述

面试题3:

筛选安装版本号

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
[root@localhost opt]# cat test1.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
[root@localhost opt]# cat test1.txt | egrep -o "\b([0-9][.][0-9][0-9])|\b([0-9][.][0-9][.][0-9])"
1.9.7
1.9.7
2.7.7
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5

打印指定时间内的日志:

[root@localhost opt]# tail /var/log/messages | sed -n '/Jun 21 13:01:01/,/Jun 21 14:00:01/p'

sed的主要作用是对文本的内容进行增删改查

其中最好用的,最强大的是改和增。

作业:

使用脚本的形式,结合sed命令,把pxe自动装机做一个自动化装机做一个自动化部署的脚本。
)(.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


[root@localhost opt]# cat test1.txt | egrep -o “\b([0-9][.][0-9][0-9])|\b([0-9][.][0-9][.][0-9])”
1.9.7
1.9.7
2.7.7
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5


打印指定时间内的日志:

[root@localhost opt]# tail /var/log/messages | sed -n ‘/Jun 21 13:01:01/,/Jun 21 14:00:01/p’


sed的主要作用是对文本的内容进行增删改查

其中最好用的,最强大的是改和增。

# 作业:

使用脚本的形式,结合sed命令,把pxe自动装机做一个自动化装机做一个自动化部署的脚本。

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

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

相关文章

约束求解器方案设计

1.约束求解介绍 给定一个几何对象(点、直线段、圆、圆弧、平面等)的集合G和一个关于集合G中几何对象之间约束(点的位置、直线段的长度、圆弧对应的圆心角角度、垂直、相切等) 的集合C,则在二元组(G,C)中根…

探索全球奇趣,开启你的海外盲盒app开发之旅!

在追求个性化和独特体验的今天,你是否渴望拥有一款能够带你穿越国界、领略世界各地新奇好物的App?为了满足广大用户对于未知的好奇与探索欲望,我们精心打造了一款海外盲盒App,带你踏上一段充满惊喜的全球购物之旅。 一、产品介绍…

DVWA 靶场 Authorisation Bypass 通关解析

前言 DVWA代表Damn Vulnerable Web Application,是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序,旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

山东济南比较出名的起名大师的老师,中国最厉害的改名大师颜廷利:短命的小草,年年自损;长寿的大树,万古长青。。。(升命学说)

在中国第一起名大师的老师颜廷利教授的《升命学说》中,通过“净化论”、“和合法则”、“唯悟主义”以及“镜正理念”的阐述,我们得以窥见生命的不同维度。他以自然界中短命的小草与长寿的大树为例,揭示了生命形态的对比与哲理。 小草&#…

106、从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 提示: 1 < inorder.length < 3000postorder.length inorder.length-3000 < inorder[i]…

远程医疗软件到底哪个好用?

随着科技进步的不断推进&#xff0c;远程医疗已经成为现代医疗体系的一个重要支柱。远程医疗软件&#xff0c;通过网络通信技术的运用&#xff0c;打破了地理限制&#xff0c;实现了医疗资源的有效整合与共享&#xff0c;为民众提供了前所未有的便捷高效的医疗服务体验。那么&a…

期末考后怎样发成绩?

老师们&#xff0c;下周可就是期末考啦&#xff0c;又到了头疼发成绩的时候了。每当这个时候&#xff0c;家长们总是急切地咨询孩子的考试表现&#xff0c;向老师们询问成绩。这种场景几乎成了每学期结束时的常态。 别担心&#xff0c;我来安利一个超棒的工具——“易查分小程序…

跨境多账号需知:指纹浏览器需要用独立IP吗?

指纹浏览器也成为反检测浏览器&#xff0c;旨在安全管理多个账户。在跨境多账号中&#xff0c;多个账号容易引发网站怀疑并最终导致大量账户被暂停&#xff0c;使用反检测浏览器的主要目的是通过创建新的浏览器指纹来隐藏用户的真实浏览器指纹。 但浏览器指纹并不是网站关注的唯…

拒绝吸烟,远离慢阻肺——朗格力复合营养素助力守护肺部健康

#肺科营养#朗格力#班古营养#复合营养素#肺部营养#肺部健康# 你知道吗?慢阻肺这一疾病在我国的患者数量已突破亿级大关,尤其在40岁以上的成年人中,平均每7个人中就有1位可能受其困扰。然而,很多人对慢阻肺的严重性认识不足,常常将其视为一种普通的咳嗽或喘息,忽视了它潜在的危…

为什么伦敦金新手不能用一小时图及以下的时间周期?

刚进入伦敦金市场的投资者&#xff0c;一般不建议使用较低的时间周期&#xff0c;如1小时图或以下。不仅如此&#xff0c;新手或者兼职投资者会被要求使用较高的时间周期交易&#xff0c;如4小时图或日线图&#xff0c;这有什么道理呢&#xff1f;下面我们就来讨论一下。 新手的…

C++初学者指南第一步---11.字符串(基础)

C初学者指南第一步—11.字符串&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---11.字符串&#xff08;基础&#xff09;1. std::string2. char std::string的元素类型3. std::string字符串操作4. 字面量4.1 C风格字符串字面量4.2 "std::string 字面量"s…

河南大学24计算机考研数据,有三个学院招收计算机相关专业,都是考的408!

河南大学&#xff08;Henan University&#xff09;&#xff0c;简称“河大”&#xff0c;是河南省人民政府与中华人民共和国教育部共建高校&#xff0c;国家“双一流”建设高校&#xff0c;入选国家“111计划”、中西部高校基础能力建设工程、卓越医生教育培养计划、卓越法律人…

DBeaver通过jdbc方式连接ES(免证书)

前言 之前其实已经分享过DBeaver连接ES,为什么重新分享一篇,用过的肯定知道,之前那种方式需要ES服务的服务器上装证书,免费证书只能用一个月。这次分享的就是解决这个时间限制问题,但是需要用一个自己开发的jar,而且暂未上到maven的中心库。 一、先看效果 证书方式 自研…

【R语言】地理探测器模拟及分析(Geographical detector)

地理探测器模拟及分析 1. 写在前面2. R语言实现2.1 数据导入2.2 确定数据离散化的最优方法与最优分类2.3 分异及因子探测器&#xff08;factor detector&#xff09;2.4 生态探测器&#xff08;ecological detector&#xff09;2.5 交互因子探测器&#xff08;interaction dete…

labelme 标注岩石薄片数据集流程

labelme 数据标注使用流程 1.打开anaconda环境2.打开labelme工具3.打开数据集文件夹4.开始标注5. 标注完成6. 修改labels.txt文件7. 将标注结果可视化8. 完成json转图片9. 全部命令总结 1.打开anaconda环境 2.打开labelme工具 输入下列两条命令&#xff0c;打开labelme工具 &a…

Type-C诱骗芯片LDR6500

随着科技的飞速发展&#xff0c;电子设备的智能化和便携化已成为趋势。在这个过程中&#xff0c;Type-C接口因其高速传输、正反可插以及强大的扩展能力&#xff0c;逐渐成为主流接口标准。然而&#xff0c;Type-C接口的广泛应用也带来了一系列挑战&#xff0c;其中之一便是如何…

云邮件推送服务如何配置?有哪些优势特点?

云邮件推送的性能怎么优化&#xff1f;如何选择邮件推送服务&#xff1f; 云邮件推送服务是一种基于云计算的邮件发送解决方案&#xff0c;能够帮助企业和个人高效地发送大规模邮件。AokSend将详细介绍如何配置云邮件推送服务&#xff0c;以便你能够充分利用其优势。 云邮件推…

[保姆级教程]uniapp自定义导航栏

文章目录 导文隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 添加自定义导航栏视图&#xff1a;手写导航栏组件导航栏 导文 在 UniApp 中&#xff0c;自定义导航栏通常涉及到隐藏默认的导航栏&#xff0c;并在页面顶部添加自定义的视图组件来模拟导航栏的功能。 隐藏默认导航…

VBA语言専攻T3学员领取资料通知

各位学员∶本周MF系列VBA技术资料增加631-635讲&#xff0c;T3学员看到通知后请免费领取,领取时间6月21日晚上19:00-6月22日晚上20:00。本次增加内容&#xff1a; MF631:提取某列数据的唯一值 MF632:自动调整文本并旋转到90度 MF633:仅复制格式 MF634:Mod运算判断奇数偶数 …

cef内核最近使用的体会低版本vs编译下载嵌入的体会

文章目录 前言1、cef简介和下载编译2、嵌入到工程框架中遇到的问题 3、VisualStudio2017、2019编译4、如何使用编译好的库以及相关动态文件5、注意6、常见问题7、cef的通信及同步调用JS 前言 最近一段时间忙着把浏览器内核框架中的cef框架更新到新版本&#xff0c;以及最近对于…