当前位置: 首页 > news >正文

Linux:sed进阶(12)

Linux:shell脚本:基础使用(5)《正则表达式-sed工具》_linux脚本表达式s-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/132347574?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170842228716800197075232%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170842228716800197075232&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-132347574-null-null.nonecase&utm_term=sed&spm=1018.2226.3001.4450一些基础的案例我都写在这个文章里了


简单的概述一下:一种流编辑器,它是文本处理中非常常用的工具,能够完美的配合正则表达式使用。可删除(delete)、改变(change)、添加(append)、插入(insert)、合并、交换文件中的数据行,或读入其它文件的数据到文件中,也可替换(substuite)它们其中的字符串、或转换(tranfer)其中的字母等。


语法:sed   参数   条件   文件等


常用选项:

  -n    抑制自动打印pattern space,sed默认输出全部,-n用于取消默认输出;

  -i     编辑文件;

  -r    支持扩展正则表达式;


常用操作符:

  a            在当前行的下一行添加内容

  c     将选定行替换为指定内容

  d     删除选定的行

  i        在当前行的上一行添加内容

  p        打印指定行内容

  s            替换选定字符为指定字符


1.改(案例)

带-i才对文件进行生效的修该,如果不带-i只是将源文件修改后的结果输出一下,但是不会进行修改文件 

sed -i 's/old/new/g' file                               #所有内容进行替换,把old替换成new
sed -i '2s/old/new/g' file                                  #将文件的第二行的所有old替换成new
sed -i '/reg/s/old/new/g' file   #包含red的行里面所有的old替换成new
sed -i '/aaa/{H;d};$G' file   #将包含aaa的行迁移至文件的末尾
sed -i '/aaa/{H;d};15G' file         #将包含aaa的行迁移至15行后
sed -i '/aaa/w 2.file' 1.file          #将1.file中包含aaa的行保存至2.file
sed 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-ens32#将sed 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-ens32
#这个文件中的所有dhcp改成static  只显示 出来但是不会写进文件里生效,意思就
#是给你看一下修该后的,但是原有数据不会被改变,你再进去配置发现一点没变
sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1#将sed 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-ens32
#这个文件中的所有dhcp改成static,直接修该文件,并不会显示了
sed -i 's/dhcp/static/g' ip       #将所有的dhcp替换为static
sed -i '/^IP1/s/static/dhcp/g' ip           #将IP1开头的行替换
sed -i '2s/static/dhcp/g' ip                           #第2行的所有static替换成dhcp并写入文件
sed -i '7s/disabled/enforcing/g' /etc/selinux/config   #将第七行的全部disabled改为enforcing

2.删

语法:sed  '/表达式/d'  文件

常用语法:sed -i '2d' file                           #基于行号进行删除

                  sed -i '/reg/d' file                     #基于正则进行删除

sed '/^$/d' ip                                          #删除空行并显示在屏幕上,并不会对文件进行修改
sed -i '/IP1/d' ip                                    #删除包含IP1的行
sed -i '/^IP2/d' ip                                #删除以IP2开头的行
sed -i '2d' ip                                            #删除第二行

3.增

语法:sed '  /表达式/a "需要添加的文字"'   文件

常用语法:sed -i '2a text' file                                     ##在某行后添加内容

                     sed -i '2i text' file                                      ##在某行前添加内容

                     sed -i '/reg/a text' file                              ##结合正则在匹配行后添加内容

sed 'a IP3=static' ip  			#每一行后都加上IP3=staticsed '3a IP3=static' ip 		   #只在第3行后加上IP3=static,并显示不修改sed '3i IP3=static' ip  			#只在第3行前加上IP3=static,显示不修改sed -i '3a IP3=static' ip 			#修改,不显示sed -i '/^IP3/a "test add"' ip 	    #在以IP3开头的行后添加

 


4.查

语法:sed  -n  '/表达式/p'   文件

常用语法:sed -n '2p' file                                            ##基于行号打印内容

                     sed -n '/reg/p' file                                    ##基于正则匹配行打印内容

                     sed -n '3,5p' file                                        ##查看行号范围

                     sed -n 'p;n' file                                           ##查看所有奇数行

                     sed -n 'n;p' file                                           ##查看所有偶数行

                     sed -n '1,5{p;n}' file                                  ##查看1-5行内的奇数行

                     sed -n '5,${p;n}' file                                  ##查看5-末尾行内的奇数行

                     sed -n '5,/aaa/p' file                                 ##查看自第五行到末尾行的包含aaa的行

                     sed -n '/aaa/=' file                                    ##输出包含aaa的行的行号,仅仅是行号

sed -n '2p' /etc/hosts                           ##查看第二行

sed -n '/www/p' /var/named/chroot/var/named/linuxfan.cn.zone ##查看包含www的解析记录

sed -n '/.100$/p' /var/named/chroot/var/named/linuxfan.cn.zone  ##查看以.100结尾的行

sed -n '2~2p' ip                                      ##从第二行,每隔两行显示

ifconfig eth0|sed -n '2p'|sed 's#.*dr:##g'|sed 's# Bc.*##g'               ##注:当sed命令处理的内容为多行内容,则以/作为表达式的分隔,若sed命令处理的内容为单行内容,作为截取的作用,以#号作为分隔符;

10.0.0.9

ifconfig eth0|sed -n '2p'|sed -r 's#(.*dr:)(.*)(Bc.*$)#\2#g'                 ##-r支持扩展正则,\2将2转义,打印出第二个范围(.*)

10.0.0.9 

ifconfig eth0|sed -n '2p'|sed -r 's#.*dr:(.*) Bc.*$#\1#g'

10.0.0.9

ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp'

10.0.0.9

ifconfig eth0|sed -nr '1s#^.*dr (.*)#\1#gp'

00:0C:29:33:C8:75 

ifconfig eth0|sed -n '1p'|sed -r 's#(^.*dr )(.*)#\2#g'

00:0C:29:33:C8:75

ifconfig eth0|sed -n '1p'|sed 's#^.*dr ##g'           

00:0C:29:33:C8:75

ifconfig eth0|sed -nr '1s#^.*t (.*) 00.*$#\1#gp'

HWaddr

stat /etc/hosts|sed -n '4p'                           

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

stat /etc/hosts|sed -n '4p'|sed 's#^.*ss: (##g'|sed 's#/-.*$##g'

0644

stat /etc/hosts|sed -n '4p'|sed -r 's#^.*s: \((.*)/-.*$#\1#g'

0644

stat /etc/hosts|sed -nr '4s#^.*s: \((.*)/-.*$#\1#gp'

0644

stat /etc/hosts|sed -nr '4s#(^.*s: \()(.*)(/-.*$)#\2#gp'

0644

相关文章:

Linux:sed进阶(12)

Linux:shell脚本:基础使用(5)《正则表达式-sed工具》_linux脚本表达式s-CSDN博客https://blog.csdn.net/w14768855/article/details/132347574?ops_request_misc%257B%2522request%255Fid%2522%253A%252217084222871680019707523…...

Linux命令-builtin命令(执行bash内建命令)

说明 用于执行指定的bash内建命令。builtin 命令调用的bash内建命令优先于同名的外部命令及同名的shell函数。 语法 builtin [shell-builtin [arg ...]]参数 shell-builtin(可选):要调用的bash内建命令。 arg(可选&#xff09…...

HTML的特殊字符

HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的&#xff0c;例如: 空格&#xff0c;小于号(<)&#xff0c;大于号(>)&#xff0c;按位与(&)。 空格 示例代码&#xff1a; 运行结果&#xff1a; 由于html 标签就是用 < > 表示的&#xff0…...

内核移植学习

内核移植 内核移植就是指将RT-Thread内核在不同的芯片架构、不同的板卡上运行起来。 移植可分为CPU架构移植和BSP板级支持包移植两部分。 CPU架构移植 在嵌入式领域有多种不同CPU架构&#xff0c;例如Cortex-M、ARM920T、MIPS32、RISC-V等等。 为了使RT-Thread能够在不同C…...

Mysql 两个日期相减得到指定的格式数据

首先避坑&#xff1a; Mysql 中两个日期直接相减&#xff0c;若在同一天则得到的是秒&#xff0c;否则相减得到的并不是秒&#xff0c;一定要注意。 函数 TIMESTAMPDIFF(unit,begin,end); 函数返回 begin - end 的结果。 其中 begin 和 end 是 DATE 或 DATETIME 表达式。 …...

第六十四天 服务攻防-框架安全CVE复现Apache shiroApache Solr

第六十四天 服务攻防-框架安全&CVE复现Apache shiro&Apache Solr 知识点: 中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic.JBoos,WebSphere, Jenkins,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring, Flask,jQuery等 1、开发框…...

JavaScript 设计模式之享元模式

享元 将一部分共用的方法提取出来作为公用的模块 const Car {getName: function () {return this.name},getPrice: function (price) {return price * 30} }const BMW function (name, price) {this.name namethis.price price } BMW.prototype Car const bmw new BMW(…...

利用故事推动企业变革:如何提升数据分析技能

单一的数据和表格尽管有算法的支撑&#xff0c;但在其表达方式上总会让人感到头疼。当我们需要深入了解企业的盈利能力&#xff0c;或是尝试评估业务的增长机会时&#xff0c;以往都会将精力全部放在分析数字、阅读信息、回顾历史和沟通交流之上&#xff0c;却忽略随之而生成的…...

Python内置函数04——enumerate

文章目录 概述语法实例展示 概述 在Python中&#xff0c;enumerate()是一个很常用的内置函数。它的作用是将一个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;组合为一个索引序列和元素序列的枚举对象。 语法 enumerate(iterable, start0) 其中&#xff0c;ite…...

unity学习(28)——登录功能

有之前注册的知识&#xff0c;登录就很容易处理了。 登陆成功返回id&#xff1a; 登录失败返回null&#xff1a; 测试同一账号不能重复登陆&#xff01;登录成功后最好可以跳到新的场景中 结果是好的&#xff0c;去服务器看一下对应部分的代码&#xff0c;可见&#xff0c;登…...

Mac公证脚本-Web公证方式

公证方式 Mac 公证方式有三种 公证方法 优点 缺点 阐述 Xcode Xcode携带的图形界面&#xff0c;使用方便 无法进行自动化公证 单个App应用上架使用较多 altool&#xff08;旧版&#xff09; 支持pkg&#xff0c;dmg&#xff0c;脚本自动化 2023/11/01 将会过期 已经…...

让你专注工作的思维模板,进入每天的专注生活

开启专注生活&#xff0c;打造高效氛围&#xff0c;踏上传奇之路。 如何专注工作&#xff1f; 阻止内部干扰阻止外部干扰结论 专注象限图如下&#xff1a;&#xff08;幸福是一种不断增加难度的活动&#xff09; A1是你开始做某事的时候。 A2是当任务变得过于简单的时候。 A3是…...

Java之获取Nginx代理之后的客户端IP

Java之获取Nginx代理之后的客户端IP Nginx代理接口之后&#xff0c;后台获取的IP地址都是127.0.0.1&#xff0c;解决办法是需要配置Nginx搭配后台获取的方法&#xff0c;获得设备的真实地址。我们想要获取的就是nginx代理日志中的这个IP nginx配置 首先在nginx代理的对应lo…...

【springboot+vue项目(十五)】基于Oauth2的SSO单点登录(二)vue-element-admin框架改造整合Oauth2.0

Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架&#xff0c;提供了丰富的组件和功能&#xff0c;可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 &#xff08;一&#xff09;Vue-element-admin 的主要文件和目录 vue-element-admin/ |…...

音频的传输链路与延迟优化点

麦克风->系统采集模块->APP采集模块->3A、混响等音效->混音->音频编码->RTC网络发送-> MediaServer->RTC网络接收->音频jitter buffer->音频解码->音频的后处理(均衡)->APP播放模块->x系统播放模块->扬声器/耳机。 整个链路如上&a…...

【51单片机】直流电机驱动(PWM)(江科大)

1.直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 2.电机驱动…...

腾讯文档(excel也一样)设置单元格的自动行高列宽

1. 选中单元格 可选择任意一个或者几个 2. 设置自动 行高和列宽 即可生效...

vue-router 提供的几种导航守卫

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中&#xff1a;全局的&#xff0c;单个路由独享的&#xff0c;或者组件级的。 1、全局前置守卫​ 你可以使用 router.beforeEach 注册一个全局前置守卫&#xff1a; const route…...

Element UI 组件的安装及使用

Element UI 组件的安装及使用 Element UI 是一套基于 Vue.js 的桌面端 UI 组件库&#xff0c;提供了丰富的、高质量的 UI 组件&#xff0c;可以帮助开发者快速构建用户界面。 1、安装 Element UI 使用 npm 安装 npm install element-ui -S2、使用 CDN 安装 在 HTML 页面中引…...

网站架构演变、LNP+Mariadb数据库分离、Web服务器集群、Keepalived高可用

目录 day02 深入理解程序的数据存储 验证 配置NFS服务器 配置代理服务器 配置名称解析 day02 深入理解程序的数据存储 程序将文字数据保存到数据库中程序将非文字数据&#xff08;如图片、视频、压缩包等&#xff09;保存到相应的文件目录中 验证 发一篇文章&#xf…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...