36 - shell之sed

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	zzz26	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
ewdsdds
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	1232	1234	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	3455	3456	 

在这里插入图片描述

匹配字符串删除行

在这里插入图片描述

在这里插入图片描述

面试题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	23413	34514	AAA15	BBB16	ZZZ17	QQQ18	QQQ19	ZZZ20	SSS21	AAA22	DDD23	DDD12324	34525	234

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

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

[root@localhost opt]# cat -n test1 | sed 's/[A-Z]/\l&/g'  13	34514	aaa15	bbb16	zzz17	qqq18	qqq19	zzz20	sss21	aaa22	ddd23	ddd12324	34525	23426	34527	aaa28	bbb29	zzz30	zzz31	sss32	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.mzph.cn/news/857165.shtml

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

相关文章

【LeetCode刷题】6. Z 字形变换

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 6. Z 字形变换 2. 题目描述 3. 解题方法 假设一串字符串"abcdefghijklmnopqrstuvwx", 会有如下排列: 我们再以下标来看看排列 从下标来看,每个下标是有规律的 每一行的下标之间的差…

Java基础 - 练习(五)根据今天日期获取一周内的日期(基姆拉尔森公式)

基姆拉尔森计算公式用于计算一周内的日期。比如给你年月日&#xff0c;从而计算今天是星期几。 基姆拉尔森公式 Week (d2*m3*(m1)/5yy/4-y/100y/4001) mod 7&#xff0c; 3<m<14Week的取值范围是0 ~ 6&#xff0c;其中0代表星期日&#xff0c;1 ~ 6分别代表星期一到星期…

【ai】tx2-nx 开通samba

ubutn服务器加入了samba给jetson也加入一个samba 添加root用户 密码与nvidia一样 添加nvidia 到suoders中并添加samba账号 nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ sudo vi /etc/sudoers nvidia@tx2-nx:~$ sudo chm

【第24章】Vue实战篇之用户信息展示

文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…

使用Python selenium爬虫领英数据,并进行AI岗位数据挖掘

随着OpenAI大火&#xff0c;从事AI开发的人趋之若鹜&#xff0c;这次使用Python selenium抓取了领英上几万条岗位薪资数据&#xff0c;并使用Pandas、matplotlib、seaborn等库进行可视化探索分析。 但领英设置了一些反爬措施&#xff0c;对IP进行限制封禁&#xff0c;因此会用到…

每月 GitHub 探索|10 款引领科技趋势的开源项目

1.IT-Tools 仓库名称&#xff1a; CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议&#xff1a; GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目&#xff0c;提供各种对开发者友好的在线工具&#xff0…

【C语言】14.数组指针与函数指针及其应用

一、数组指针 顾名思义&#xff0c;数组指针就是指向数组的指针。形如&#xff1a;int (*p)[10]; 注意&#xff1a;[]的优先级要高于*号的&#xff0c;所以必须加上&#xff08;&#xff09;来保证p先和*结合。 数组指针的使用 int arr[10] {0}; int (*parr)[10] &arr;…

numpy-stl库的基本使用及notebook下的使用

numpy-stl库的基本使用及notebook下的可视化 https://pypi.org/project/numpy-stl/ 安装 conda install -c conda-forge numpy-stl引入资源 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits import mplot3d from stl import mesh读取stl文件 stl_fil…

springboot特殊问题处理2——springboot集成flowable实现工作流程的完整教程(一)

在实际项目开发过程中&#xff0c;流程相关的业务实现采用工作流会异常清晰明了&#xff0c;但是Activity学习成本和开发难度对追求效率的开发工作者来说异常繁琐&#xff0c;但是作为Activity的亲儿子之一的flowable&#xff0c;其轻量化的使用和对应的api会让开发者感受简单&…

超越GPT-4o!新王Claude 3.5 Sonnet来啦!免费使用

目录 01 比GPT-4o更智能&#xff0c;比Claude 3 Opus快两倍 02 最强视觉Model 03 使用Claude的新方式&#xff1a;Artifacts 04 安全性和透明度 Anthropic刚刚发布了全新大模型Claude 3.5 Sonnet&#xff0c;号称是迄今为止最智能的模型。一文几步教你注册使用Claude 3.5 S…

【面试题】风险评估和应急响应的工作流程

风险评估和应急响应是网络安全管理中两个重要的环节。下面分别介绍它们的工作流程&#xff1a; 一、风险评估工作流程&#xff1a; 1.确定评估范围&#xff1a;明确需要评估的信息系统或资产的范围。 2.资产识别&#xff1a;识别并列出所有需要评估的资产&#xff0c;包括硬件…

prometheus+grafana搭建监控系统

1.prometheus服务端安装 1.1下载包 使用wget下载 &#xff08;也可以直接去官网下载包Download | Prometheus&#xff09; wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz1.2解压 tar xf prometheus-2.44…

Modbus协议转Profibus协议网关模块连PLC与激光发射器通讯

一、概述 在PLC控制系统中&#xff0c;从站设备通常以Modbus协议&#xff0c;ModbusTCP协议&#xff0c;Profinet协议&#xff0c;Profibus协议&#xff0c;Profibus DP协议&#xff0c;EtherCAT协议&#xff0c;EtherNET协议等。本文将重点探讨PLC连接Modbus协议转Profibus协…

RGB彩色模型理解与编程实例

一、引言 RGB彩色模型中的R、G和B为三原色&#xff0c;通常R、G和B分别用8位表示&#xff0c;因此24位的RGB 真彩色图像能表示16777216种颜色。在如右图所示RGB彩色立方体可知&#xff0c;任意两种原色混合可以合成一种新的颜色。红&#xff08;1&#xff0c;0&#xff0c;0&a…

微型操作系统内核源码详解系列五(3):cm3下调度的开启

系列一&#xff1a;微型操作系统内核源码详解系列一&#xff1a;rtos内核源码概论篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列二&#xff1a;微型操作系统内核源码详解系列二&#xff1a;数据结构和对象篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列…

如何使用nginx部署https网站(亲测可行)

公司本来有网站sqlynx.com是http运行的&#xff0c;但因为产品出海&#xff0c;基本上都要求使用https&#xff0c;但又需要兼容已有的http服务&#xff0c;所以我自己尝试做了一次https的部署&#xff0c;目前是正常可用的。 目录 步骤 1&#xff1a;安装 Nginx 步骤 2&…

数据仓库的实际应用示例-广告投放平台为例

数据仓库的数据分层通常包括以下几层&#xff1a; ODS层&#xff1a;存放原始数据&#xff0c;如日志数据和结构化数据。DWD层&#xff1a;进行数据清洗、脱敏、维度退化和格式转换。DWS层&#xff1a;用于宽表聚合值和主题加工。ADS层&#xff1a;面向业务定制的应用数据层。…

node版本过高出现ERR_OSSL_EVP_UNSUPPORTED错误

错误原因&#xff1a; 新版本的nodejs使用的openssl和旧版本不同&#xff0c;导致出错 解决方法&#xff1a; 1.将node版本重新换回16.x 2 windows 下 在package.json文件下添加set NODE_OPTIONS--openssl-legacy-provider && "scripts": {"dev"…

Linux开发讲课8--- linux的5种IO模型

一、这里IO是什么 操作系统为了保护自己&#xff0c;设计了用户态、内核态两个状态。应用程序一般工作在用户态&#xff0c;当调用一些底层操作的时候&#xff08;比如 IO 操作&#xff09;&#xff0c;就需要切换到内核态才可以进行 服务器从网络接收的大致流程如下&#xff1…

非常难找的AI衣服图片处理工具推荐,一键轻松AI编辑

在当今数字化时代&#xff0c;AI技术已经渗透到我们生活的方方面面。特别是在图片处理领域&#xff0c;AI的强大功能让很多原本繁琐复杂的操作变得简单易行。今天&#xff0c;我要为大家推荐一款好用的AI衣服图片处理工具——让你一键轻松完成AI编辑&#xff0c;快速实现专业效…