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

shell编程之sed

文章目录

    • 八、shell编程之sed
      • 8.1 工作原理
      • 8.2 sed基本语法
      • 8.3 模式空间中的编辑操作
        • 8.3.1 地址定界
        • 8.3.2 常用编辑命令
        • 8.4 sed扩展

八、shell编程之sed

8.1 工作原理

sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变。
在这里插入图片描述

sed的特点:
(1)sed命令是将一系列的编辑命令应用于一批文本的理想工具。

(2)sed命令是一个非交互式的文本编辑器,它可以对来自文本文件以及标准输入的文本进行编辑。其中,标准输入可以是来自键盘、文件重定向、字符串、变量或者是管道的文本。

(3)sed命令会从文件或者标准输入中一次读取一行数据,将其复制到缓冲区(最多8192字节),然后读取命令行或者脚本的编辑子命令,对缓冲区中的文本行进行编辑。重复此过程,一直到所有的文本行都处理完毕。

8.2 sed基本语法

sed OPTIONS… [SCRIPT] [INPUTFILE…]

常用的选项:

 
-n,--quiet,--silent:不输出模式空间中的内容,使用安静模式,在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来;-i:直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作; 
-e:直接在命令行模式上进行sed的动作编辑,多个子命令之间也可以用分号隔开; sed -e 'command1;command2... filename 或者 sed -e 'command1' -e 'command2' ……filename 
-r:使用扩展正则表达式; 
-f:直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作。

8.3 模式空间中的编辑操作

8.3.1 地址定界

1)#:#为数字,指定要进行处理操作的行;1,表示第一行;

2)$:表示最后一行,多个文件进行操作的时候,为最后一个文件的最后一行;

3)/regexp/:表示能够被regexp匹配到的行;
regexp即基于正则表达式的匹配;

4)/regexp/I:匹配时忽略大小写;

5)%regexp%: 任何能够被regexp匹配到的行,换用%(用其他字符也可以,如:#)为边界符号;

6)addr1,addr2:指定范围内的所有的行(范围选定);
常用地址定界表示方式:
a)0,/regexp/:从起始行开始到第一次能够被regexp匹配到的行。
b)/regexp/,/regexp/:被模式匹配到的行内的所有的行。

7)first~ step:指定起始的位置及步长,例如:1~2表示1,3,5…
8)addr1,+N:指定行以及以后的N行;
     addr1,~N:指定行开始的N行;

注意事项:
1、如果没有指定地址,表示命令将应用于每一行
2、如果只有一个地址,表示命令将应用于这个地址匹配的所有行
3、如果指定了由逗号分隔的两个地址,表示命令应用于匹配第一个地址和第二地址之间的行(包括这两行)
4、如果地址后面跟有感叹号,表示命令将应用于不匹配该地址的所有行

8.3.2 常用编辑命令

1)d:删除匹配到的行
2)p:打印当前模式空间内容
3)a \text:append,表示在匹配到的行之后追加内容
4)i \text:insert,表示在匹配到的行之前追加内容
5)c \text:change,表示把匹配到的行和给定的文本进行交换
6)s/regexp/replacement/flages:查找替换,替换regexp匹配到的内容(其中/可以用其他字符代替,例如@)

其他编辑命令:
常用的flages:
g:全局替换,默认只替换第一个
i: 不区分大小写
p:如果成功替换则打印

7)r 读入文件内容追加到匹配行后面
8)R 读入文件一行内容追加到匹配行后面
9)y :y/source/dest/ 固定长度替换,要求替换的字符串长度相等
10)w /path/to/somefile:将匹配到的文件内容追加到指定的文件末尾

sed 's/north/hello/' datafile --替换每行第一个north 
sed 's/north/hello/g' datafile --全部替换 
sed '1 s/north/hello/g' datafile --替换第一行所有的north 
sed '1 s/north/hello/' datafile --替换第一行第一个north 
sed '1 s/north/hello/2' datafile --只替换第一行第二个north 

巧用替换删除内容(不是删除行)

sed 's/north//' datafile --删除所有行的第一个north 
sed 's/north//g' datafile --删除全部的north 
sed '1 s/north//2' datafile --删除第一行第二个 
sed 's/^.//' datafile --删除每行第一个字符 
sed 's/^\(..\)./\1/' datafile --删除第3个字符 
sed 's/^\<[a-zA-Z0-9]*\>//' datafile --删除每行第一个单词

8.4 sed扩展

在这里插入图片描述

cat >person.txt<<KOF 
> 101,chensiqi,CEO 
102,zhangyang,CTO 
103,Alex,COO 
104,yy,CFO 
105,feixue,CIO 
KOF 

sed如何取不连续的行

sed -n '1p;3p;5p' person.txt 

特殊符号{}的使用

sed -n '2,4p;=' person.txt //命令说明:-n去掉默认输出,2,4p,输出2到4行内容,=输出全部的行的行号 
sed -n '2,4{p;=}' person.txt //命令说明:‘2,4{p;=}’代表统一输出2,4行的行号和内容 

拓展:

[root@localhost test6]# seq 6 | sed ':a;N;s/\n/,/;b a' 
1,2,3,4,5,6 
[root@localhost test6]# seq 6 | sed ':a;N;s/\n/,/;t a' 
1,2,3,4,5,6 

8.5 sed案例
1、把/etc/passwd 复制到/root/test.txt,用sed打印所有行;

[root@localhost ~]# sed -n '1,$p' test.txt 
[root@localhost ~]# sed -n p test.txt 

2、打印test.txt的3到10行;

[root@localhost ~]# sed -n '3,10'p test.txt 

3、打印test.txt 中包含’root’的行;

[root@localhost ~]# sed -n '/root/p' test.txt

4、删除test.txt 的15行以及以后所有行;

[root@localhost ~]# sed -i '15,$d' test.txt 
[root@localhost ~]# sed -e '15,$d' test.txt(只会在命令行删除,不会真的删除原文件内容)等 
同于[root@localhost ~]# sed '15,$d' passwd 

5、删除test.txt中包含’bash’的行;

[root@localhost ~]# sed '/bash/'d test.txt 

6、替换test.txt 中’root’为’toor’;

[root@localhost ~]# sed 's/root/toor/g' test.txt 

7、替换test.txt中’/sbin/nologin’为’/bin/login’;

[root@localhost ~]# sed 's#/sbin/nologin#/bin/login#' test.txt 

8、删除test.txt中5到10行中所有的数字;

[root@localhost ~]# sed '5,10s/[0-9]//g' test.txt 

9、删除test.txt 中所有特殊字符(除了数字以及大小写字母);

[root@localhost ~]# sed 's/[^0-9a-zA-Z]//g' test.txt 

10、在test.txt 20行到末行最前面加’aaa:’

[root@localhost ~]# sed '20,$s/^.*$/aaa:&/g' test.txt 

11、复制/etc/grub2.cfg到/root/grub2.cfg,删除文件中所有以空白开头的行行首的空白字符;

[root@localhost ~]# sed 's/^[[:space:]]//' grub2.cfg 

12、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

[root@localhost ~]# sed 's/^#[[:space:]]*//' /etc/fstab 

13、给文件/root/anaconda-ks.cfg每一行行首增加#号

[root@localhost ~]# sed 's/^.*$/#&/' /root/anaconda-ks.cfg 

14、在/etc/fstab文件中不以#开头的行的行首增加#号;

[root@localhost ~]# sed 's/^[^#]/#&/' /etc/fstab 

15、处理/etc/sysconfig/network-scripts/路径,使用grep和sed命令取出其目录名和基名

[root@localhost ~]# echo "/etc/sysconfig/network-scripts/" |sed -r 
's#^/(.*)/(.*)/#\1#' etc/sysconfig 
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/" |sed -r 
's#^/(.*)/(.*)/#\2#' 
network-scripts 
[root@localhost ~]# echo "/etc/httpd/conf.d/host.conf" | sed -r 's#(^/.*/) 
[^/].*#\1#' 
/etc/httpd/conf.d/ 
[root@localhost ~]# echo "/etc/httpd/conf.d/host.conf" | sed -r 
's#^/.*/([^/].*)#\1#' 
host.conf 
[root@localhost ~]# basename /etc/httpd/conf.d/host.conf 
host.conf 
[root@localhost ~]# dirname /etc/httpd/conf.d/host.conf 
/etc/httpd/conf.d 
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/"|grep -o -E "[^/]+/? 
$"|grep -o -E "^[^/]+" 
network-scripts 
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/"|grep -o -E " 
(^/([^/]+/)*[^[:space:]])|^/"|grep -o -E "^/([^/]+/)*"|grep -o -E "(/[^/]+)+|^/" 
/etc/sysconfig 

16、利用sed 取出ifconfig命令中本机的IPv4地址

[root@localhost ~]# ifconfig |sed -n '2p' | sed -r "s/.*inet[[:space:]]*//" | 
sed -r "s/[[:space:]]*netmask.*//" 
192.168.168.128 

17、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

[root@localhost ~]# ls /mnt/Packages/|grep "rpm$"|sed -r 's@.*\. 
(.*)\.rpm@\1@'|sort|uniq -c 1085 i686 1216 noarch 2319 x86_64

相关文章:

shell编程之sed

文章目录八、shell编程之sed8.1 工作原理8.2 sed基本语法8.3 模式空间中的编辑操作8.3.1 地址定界8.3.2 常用编辑命令8.4 sed扩展八、shell编程之sed 8.1 工作原理 sed是一种流编辑器&#xff0c;它是文本处理中非常有用的工具&#xff0c;能够完美的配合正则表达式使用&…...

安全寒假作业nginx反向代理+负载均衡上传webshell重难点+apache漏洞

1.应用场景 负载均衡作为现今解决web应用承载大流量访问问题的一种方案&#xff0c;在真实环境中得到广泛的部署。实现负载均衡的方式有很多种&#xff0c;比如 DNS 方式、HTTP 重定向方式、IP 负载均衡方式、反向代理方式等等。 比如基于dns的负载均衡&#xff1a; 当然还有…...

day35|01背包问题、416. 分割等和子集

01背包问题 有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 例&#xff1a;背包最大重量为4。 物品为&#xff1a; 重量价值物品0115物品…...

Linux内核启动(3,0.11版本)内核启动完成与进入内核main函数

这一部分是在讲解head.s代码&#xff0c;这个代码与bootsect.s和setup.s在同一目录下&#xff0c;但是head.s程序在被编译生成目标文件后会与内核其他程序一起被链接成system模块&#xff0c;位于system模块的最前面开始部分。system模块将被放置在磁盘上setup模块之后开始的扇…...

【2023】Prometheus-Alertmanager高可用集群

本次实验准备了三个节点&#xff0c;分别为laert-01~03 目录1.安装Alertmanager2.配置启动文件3.验证集群4.关于集群的配置项1.安装Alertmanager 这部分内容在三个节点上都要执行 下载安装包&#xff0c;将安装包解压至/data目录下 wget https://github.com/prometheus/aler…...

2023-2-11 刷题情况

最短路计数 题目描述 给出一个 NNN 个顶点 MMM 条边的无向无权图&#xff0c;顶点编号为 1∼N1\sim N1∼N。问从顶点 111 开始&#xff0c;到其他每个点的最短路有几条。 输入格式 第一行包含 222 个正整数 N,MN,MN,M&#xff0c;为图的顶点数与边数。 接下来 MMM 行&…...

2019_41 考研408

2019年(单链表)41.(13分)设线性表采用带头结点的单链表保存&#xff0c;链表中的结点定义如下:typedef struct node {int data;struct node* next;}NODE;请设计一个空间复杂度为O(1)且时间上尽可能高效的算法&#xff0c;重新排列L中的各结点&#xff0c;得到线性表L(q,a,,a,an…...

Linux账号与用户组

目录 用户标识符&#xff1a;UID与GID 用户账号 /etc/passwd文件结构 1、账号名称 2、密码 3、UID 4、GID 5、用户信息说明栏 6、家目录 7、shell /etc/shadow文件结构 1、账号名称 2、密码 3、最近修改密码的日期 4、密码不可被修改的天数&#xff08;与第三字…...

有趣的Hack-A-Sat黑掉卫星挑战赛——定位卫星Jackson

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…...

JAVA集合专题3 —— vector + LinkedList + Set

目录vector的特点LinkedList底层结构模拟双向链表比较ArrayList和LinkedListSet接口基本介绍Set接口的遍历方式Set接口实现类对象的特点Set接口实现类HashSet模拟HashSet/HashMap的底层结构vector的特点 Vector底层是一个对象数组Vector是线程同步的&#xff0c;即线程安全的&…...

Scout:一款功能强大的轻量级URL模糊测试与爬取工具

关于Scout Scout是一款功能强大的轻量级URL模糊测试与爬取工具&#xff0c;可以帮助广大研究人员进行URL模糊测试&#xff0c;并爬取目标Web服务器中难以扫描发现的VHSOT、文件和目录等资源。 项目中包含了一个完整的字典文件&#xff0c;并尽可能地提供了更多的便携性&#…...

leaflet 解决marker呈现灰色边框的问题

第052个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet示例中处理marker外面有灰色边框的问题,请看未处理会后的图片。 处理后的结果非常满意,不再显示灰色边框。处理方法参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意…...

MySQL JSON类型字段的查找与更新

MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新&#xff0c;详见官方文档。 创建一个表 t1&#xff0c;basic_info 字段为JSON类型: CREATE TABLE t1 (id int(11) NOT NULL AUTO_INCREMENT,basic_info json DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CH…...

element Ui树状图控件 spring boot Vue 实现角色授权功能

目录 前言&#xff1a; 二. element ui 2.1官网提供的核心代码 三.表结构 ​编辑 四.后端 4.1功能分析 4.2实体类 4.3 查询全部权限显示的结果 4.2修改角色权限的后台方法 五.vue 5.0代码总览 5.1树形图 5.2所需要的绑定数据 5.3所需方法 前言&#xff1a; 先上图…...

已解决sc delete MongoDB卸载MongoDB拒绝访问。

已解决sc delete MongoDB卸载MongoDB拒绝访问。 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 粉丝群里面的一个小伙伴遇到问题跑来私信我&#xff0c;想卸载MongoDB数据库&#xff0c;但是发生了报错&#xff08;当时他心里瞬间凉了一大截&…...

python的opencv操作记录11——阈值分割

文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割&#xff0c;很多人会直接想到当前火爆的深度学习的各种分割网络&#xff0c;比如实例分割&#xff0c;语义分割等。其实在传统…...

Python-项目实战--飞机大战-英雄登场(7)

目标设计英雄和子弹类使用pygame.key.get_pressed()移动英雄发射子弹1.设计英雄和子弹类1.1英雄需求游戏启动后&#xff0c;英雄出现在屏幕的水平中间位置&#xff0c;距离屏幕底部120像素英雄每隔0.5秒发射一次子弹&#xff0c;每次连发三枚子弹英雄默认不会移动&#xff0c;需…...

寒假安全作业nginx-host绕过实例复现

1.测试环境搭建 LNMP架构的话&#xff0c;肯定就是linux、nginx、mysql、php四大组件。在后面的复现中我们还会用到https的一部分知识&#xff0c;故这里的nginx就需要使用虚拟主机并且配置https证书&#xff0c;且具有php解析功能。 1.1 基础nginx配置 #1.创建web目录 mkdir …...

RocketMQ-消息消费模式 顺序消费

RocketMQ-消息消费模式 顺序消费RocketMQ-消息消费模式集群模式集群模式的演示(本身就默认)Rocketmq存储队列广播模式顺序消费如何改实现顺序消费RocketMQ-消息消费模式 集群模式 在消费模式为集群的情况下,如果机器是集群的,消息只会给集群中的其中一台机器消费到 集群模…...

一、Java并发编程之线程、synchronized

黑马课程 文章目录1. Java线程1.1 创建和运行线程方法一&#xff1a;Thread方法二&#xff1a;Runnable&#xff08;推荐&#xff09;lambda精简Thread和runnable原理方法三&#xff1a;FutureTask配合Thread1.2 查看进程和线程的方法1.3 线程运行原理栈与栈帧线程上下文切换1.…...

CentOS 8系统下EMQX 4.3.8安装避坑实录:解决crypto和libncurses依赖报错

CentOS 8系统下EMQX 4.3.8深度部署指南&#xff1a;从依赖解析到高可用架构 在物联网和边缘计算领域&#xff0c;MQTT协议凭借其轻量级和高效性已成为设备通信的事实标准。而EMQX作为基于Erlang/OTP平台开发的开源MQTT消息服务器&#xff0c;其单节点支持200万连接的能力使其成…...

AutoJs6架构深度解析:JavaScript自动化引擎在Android平台的实现原理

AutoJs6架构深度解析&#xff1a;JavaScript自动化引擎在Android平台的实现原理 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 AutoJs6作为Android平台领先的JavaScript自动化…...

从数据提取到AI记忆:WeChatMsg项目开发者协作实战蓝图

从数据提取到AI记忆&#xff1a;WeChatMsg项目开发者协作实战蓝图 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...

FABRK全栈框架:模块化设计与AI辅助开发实战解析

1. 项目概述&#xff1a;一个为AI时代而生的全栈开发框架如果你和我一样&#xff0c;在过去几年里反复搭建过各种SaaS应用、管理后台或者数据看板&#xff0c;你一定会对那种重复劳动感到厌倦。每次新项目启动&#xff0c;都要重新配置身份验证、集成支付、设计仪表盘组件、处理…...

芯片人才危机破局:D.E.I.B.战略如何驱动创新与商业成功

1. 芯片行业人才危机的深度剖析与D.E.I.B.的战略价值 最近和几位在芯片设计公司和晶圆厂负责招聘的老友聊天&#xff0c;大家不约而同地提到了同一个词&#xff1a;“焦头烂额”。不是项目进度卡脖子&#xff0c;而是人根本招不到。一位在模拟芯片公司做HR总监的朋友告诉我&…...

U-Boot分析【学习笔记】(2)

3. U-Boot 编译 在上篇文章U-Boot分析 【学习笔记】(2)中&#xff0c;给出了基于imx6ull裁剪后的U-Boot源码结构图&#xff0c;但这并不意味着把其他文件进行删除&#xff0c;而是通过配置&#xff08;.config&#xff09;的方式使编译时只选取所需要的文件进行操作。 保持源…...

MediaCreationTool.bat:革命性的Windows自动化部署解决方案

MediaCreationTool.bat&#xff1a;革命性的Windows自动化部署解决方案 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

Pinecone示例库实战指南:从向量数据库原理到RAG应用开发

1. 项目概述&#xff1a;Pinecone示例库的深度探索 如果你正在寻找一个能让你快速上手向量数据库和现代AI应用开发的“实战训练营”&#xff0c;那么Pinecone官方的 pinecone-io/examples 仓库绝对是一个不容错过的宝藏。这个仓库远不止是一个简单的代码合集&#xff0c;它更…...

码森防伪溯源系统:一站式构建产品信任桥梁,赋能品牌全流程数字化管理

在假冒伪劣产品屡禁不止、消费者对产品来源与真实性日益关注的今天&#xff0c;如何高效实现防伪、溯源、营销、管理一体化&#xff0c;已成为品牌方与技术开发者共同关注的核心问题。 防伪溯源系统&#xff0c;正是这样一套集低成本、易操作、强扩展性于一体的综合性解决方案。…...

为什么93%的开发者在WebRTC集成中卡在ElevenLabs音频缓冲层?——低延迟TTS流式传输终极调优方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs API开发接入指南 ElevenLabs 提供高质量、低延迟的语音合成&#xff08;TTS&#xff09;服务&#xff0c;其 RESTful API 支持多种语言、情感调节与声音克隆能力。接入前需在 ElevenLabs 控…...