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是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用&…...
安全寒假作业nginx反向代理+负载均衡上传webshell重难点+apache漏洞
1.应用场景 负载均衡作为现今解决web应用承载大流量访问问题的一种方案,在真实环境中得到广泛的部署。实现负载均衡的方式有很多种,比如 DNS 方式、HTTP 重定向方式、IP 负载均衡方式、反向代理方式等等。 比如基于dns的负载均衡: 当然还有…...
day35|01背包问题、416. 分割等和子集
01背包问题 有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 例:背包最大重量为4。 物品为: 重量价值物品0115物品…...
Linux内核启动(3,0.11版本)内核启动完成与进入内核main函数
这一部分是在讲解head.s代码,这个代码与bootsect.s和setup.s在同一目录下,但是head.s程序在被编译生成目标文件后会与内核其他程序一起被链接成system模块,位于system模块的最前面开始部分。system模块将被放置在磁盘上setup模块之后开始的扇…...
【2023】Prometheus-Alertmanager高可用集群
本次实验准备了三个节点,分别为laert-01~03 目录1.安装Alertmanager2.配置启动文件3.验证集群4.关于集群的配置项1.安装Alertmanager 这部分内容在三个节点上都要执行 下载安装包,将安装包解压至/data目录下 wget https://github.com/prometheus/aler…...
2023-2-11 刷题情况
最短路计数 题目描述 给出一个 NNN 个顶点 MMM 条边的无向无权图,顶点编号为 1∼N1\sim N1∼N。问从顶点 111 开始,到其他每个点的最短路有几条。 输入格式 第一行包含 222 个正整数 N,MN,MN,M,为图的顶点数与边数。 接下来 MMM 行&…...
2019_41 考研408
2019年(单链表)41.(13分)设线性表采用带头结点的单链表保存,链表中的结点定义如下:typedef struct node {int data;struct node* next;}NODE;请设计一个空间复杂度为O(1)且时间上尽可能高效的算法,重新排列L中的各结点,得到线性表L(q,a,,a,an…...
Linux账号与用户组
目录 用户标识符:UID与GID 用户账号 /etc/passwd文件结构 1、账号名称 2、密码 3、UID 4、GID 5、用户信息说明栏 6、家目录 7、shell /etc/shadow文件结构 1、账号名称 2、密码 3、最近修改密码的日期 4、密码不可被修改的天数(与第三字…...
有趣的Hack-A-Sat黑掉卫星挑战赛——定位卫星Jackson
国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…...
JAVA集合专题3 —— vector + LinkedList + Set
目录vector的特点LinkedList底层结构模拟双向链表比较ArrayList和LinkedListSet接口基本介绍Set接口的遍历方式Set接口实现类对象的特点Set接口实现类HashSet模拟HashSet/HashMap的底层结构vector的特点 Vector底层是一个对象数组Vector是线程同步的,即线程安全的&…...
Scout:一款功能强大的轻量级URL模糊测试与爬取工具
关于Scout Scout是一款功能强大的轻量级URL模糊测试与爬取工具,可以帮助广大研究人员进行URL模糊测试,并爬取目标Web服务器中难以扫描发现的VHSOT、文件和目录等资源。 项目中包含了一个完整的字典文件,并尽可能地提供了更多的便携性&#…...
leaflet 解决marker呈现灰色边框的问题
第052个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet示例中处理marker外面有灰色边框的问题,请看未处理会后的图片。 处理后的结果非常满意,不再显示灰色边框。处理方法参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意…...
MySQL JSON类型字段的查找与更新
MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新,详见官方文档。 创建一个表 t1,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 实现角色授权功能
目录 前言: 二. element ui 2.1官网提供的核心代码 三.表结构 编辑 四.后端 4.1功能分析 4.2实体类 4.3 查询全部权限显示的结果 4.2修改角色权限的后台方法 五.vue 5.0代码总览 5.1树形图 5.2所需要的绑定数据 5.3所需方法 前言: 先上图…...
已解决sc delete MongoDB卸载MongoDB拒绝访问。
已解决sc delete MongoDB卸载MongoDB拒绝访问。 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 粉丝群里面的一个小伙伴遇到问题跑来私信我,想卸载MongoDB数据库,但是发生了报错(当时他心里瞬间凉了一大截&…...
python的opencv操作记录11——阈值分割
文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统…...
Python-项目实战--飞机大战-英雄登场(7)
目标设计英雄和子弹类使用pygame.key.get_pressed()移动英雄发射子弹1.设计英雄和子弹类1.1英雄需求游戏启动后,英雄出现在屏幕的水平中间位置,距离屏幕底部120像素英雄每隔0.5秒发射一次子弹,每次连发三枚子弹英雄默认不会移动,需…...
寒假安全作业nginx-host绕过实例复现
1.测试环境搭建 LNMP架构的话,肯定就是linux、nginx、mysql、php四大组件。在后面的复现中我们还会用到https的一部分知识,故这里的nginx就需要使用虚拟主机并且配置https证书,且具有php解析功能。 1.1 基础nginx配置 #1.创建web目录 mkdir …...
RocketMQ-消息消费模式 顺序消费
RocketMQ-消息消费模式 顺序消费RocketMQ-消息消费模式集群模式集群模式的演示(本身就默认)Rocketmq存储队列广播模式顺序消费如何改实现顺序消费RocketMQ-消息消费模式 集群模式 在消费模式为集群的情况下,如果机器是集群的,消息只会给集群中的其中一台机器消费到 集群模…...
一、Java并发编程之线程、synchronized
黑马课程 文章目录1. Java线程1.1 创建和运行线程方法一:Thread方法二:Runnable(推荐)lambda精简Thread和runnable原理方法三:FutureTask配合Thread1.2 查看进程和线程的方法1.3 线程运行原理栈与栈帧线程上下文切换1.…...
12.hadoop系列之MapReduce分区实践
本文我们学习MapReduce默认分区以及自定义分区实践 当我们要求将统计结果按照条件输出到不同文件(分区),比如按照统计结果将手机归属地不同省份输出到不同文件中(分区) 1.默认Partitioner分区 public class HashPartitioner<K, V> extends Partitioner<…...
有了独自开,一个人就是一个团队
文章目录 简单介绍优点 优秀案例平台福利总结 简单介绍 独自开是一个基于商品与服务交易全流程的PaaS开发平台。对于开发者,独自开可以协助开发者一个人独自开发一套系统。 优点 独自开有独创的分层标准化平台架构,可以满足系统的任何个性化需求。 …...
web期末复习 2023.02.11
文章目录Web 的概念Web 组成用户通过浏览器请求资源的过程:HTML 超文本标记语言CSS插入样式表的方法有三种:对象,类,实例一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:JavaScript 用法什么是 Java Server Pages?JSP 注释JSP 的 J…...
第44章 用户密码实体及其约束规则的定义实现
1 说明: 由当前程序需要兼容实现多种用户密码的加密操作,所以必须把“CustomerPassword”定义为实体类,该类用于用于把加密方式、密钥及其加密后的密码持久化到“CustomerPassword”表中,以便用为用户登录操作提供验证支撑。 如果…...
聊聊并发与锁
持续坚持原创输出,点击蓝字关注我吧1.并发与并行并发可以充分地利用 CPU 资源,一般都会使用多线程实现。多线程的作用是提高任务的平均执行速度,但是会导致程序可理解性变差,编程难度加大。关于对并发与并行的概念,大家…...
开源项目 —— 原生JS实现斗地主游戏 ——代码极少、功能都有、直接粘贴即用
目录 效果如下 目录结构 GameEntity.js GrawGame.js konva.min.js PlayGame.js veriable.js index.html 结语: 前期回顾 卡通形象人物2 写代码-睡觉 丝滑如德芙_0.活在风浪里的博客-CSDN博客本文实现了包含形象的卡通小人吃、睡、电脑工作的网页动画https://…...
Linux第四讲
目录 四、shell脚本 4.1 shell和shell脚本 4.2 脚本语言分类 4.2.1 编译型语言 4.2.2 解释型语言 4.2.3 脚本语言 4.3 shell常见种类 4.3.1 shell分类介绍 4.3.2 查看bash版本 4.3.3 sh和bash的关系 4.4 脚本书写规范 4.4.1 选择解释器 4.4.2 开发规范 4.5 shell…...
Redis 持久化
持久化是指数据写到物理硬盘里,即便程序崩溃、或者电脑重启,依然能够恢复。Redis提供了两种持久化机制:RDB和AOF。 RDB(Redis Database): RDB文件相当于内存快照,保存了某个时间点数据库信息。使用RDB文件恢复很简单,将…...
Python语言零基础入门教程(十三)
Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, key2 : …...
江苏五年制专转本应该复习几轮?
五年制专转本应该复习几轮? 据调查统计:2022年专转本17%的考生复习三轮及以上,23%的考生复习了两轮。这两类的考生录取率高至85%。可见复习轮数多,专转本上岸的概率也大。综合多方因素,建议同学们专转本复习四轮&#…...
天元建设集团有限公司单位代码/杭州网站优化公司
出现问题如下 fastestmirror不能使用,fastestmirror是yum的一个加速插件,所有将它禁用 修改 vim /etc/yum/pluginconf.d/fastestmirror.conf将enabled1修改为enable0 使用 vim /etc/yum.conf plugins1修改0 - 最后执行 yum clean dbcache...
淄博做网站58同城/重庆网络seo公司
网站开发渠zf71cb道无论是制作网站还是在各大网站上发表文章,我们都更加注重网站的页面包含。我们每天定期更新,每天都会在各大平台上发布这么多内容。但是,网站和文章的收录情况并不乐观,网站的整体收录率也不尽如人意。我们如何…...
北京企业网站制作哪家好/北京网站优化推广公司
MySQL5.6引入了一个新的系统变量eq_range_index_dive_limit。查阅MySQL5.6官方文档得知,MySQL在执行等值范围查询例如select ... from xxx where xxx in(...)时,优化器在计算执行计划成本时会根据条件个数采用不同的方式以减小选择执行计划的开销。当条件…...
购物网站的搜索功能是怎么做的/做网站怎么优化
前端的主要任务: 1)信息展示; 2)用户交互(事件处理)。 1)移动端开发总体遵循MVC模式; 2)移动端UI包含:(1)UI组件(基本组件…...
wordpress官网主题/没干过网络推广能干吗
1、内部类的使用:(1)定义一个外部类Father,有成员变量name并赋一个初值。(2)定义一个内部类Child,并定义一个getValue()方法,在方法中调用外部类Father的name变量。(3&am…...
做期货苯乙烯的网站/东莞头条最新新闻
1.下面有关html的描述,不推荐的是? (B) A.在页面顶部添加doctype声明; B.在 </head> ... <body> 中间插入HTML代码 C.避免使用 <font> 标签 D.使用 <table> 元素展现学生成绩表等数据 2. css…...