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

【shell 编程大全】sed详解

sed详解

1. 概述

今天单独拉出一章来讲述下sed命令。因为sed命令确实内容太多,不过也是比较灵活的,好了不废话了。我们开始吧

1.2 原理解析

shell脚本虽然功能很多,但是它最常用的功能还是处理文本文件,尤其是在正常的业务操作流程场景中,比如检查日志文件、读取配置、处理数据等现象,虽然我们能够使用echo、cat、<<、>>、|等符号实现文件内容的操作,但是整个过程有些繁琐。所以我们需要一种更为轻便的文本编辑工具,sed就是其中的一种。
简介

在这里插入图片描述

2. 基本格式

2.1 轮廓格式

基本格式	sed [参数] '<匹配条件> [动作]' [文件名]
注意:匹配条件和动作两侧有'动作可以有多个,彼此间使用;隔开,比如 '2p;4p'

2.2 参数

参数详解:参数为空	 表示sed的操作效果,实际上不对文件进行编辑,缓存区所有信息都显示-n			不输出模式空间内容到屏幕,即不自动打印所有内容-e			基于命令实现对文件的多点编辑操作-f			从指定文件中读取编辑文件的”匹配条件+动作”-r			支持使用扩展正则表达式-i.bak		复制文件原内容到备份文件,然后对原文件编辑-i			表示对文件进行编辑注意:mac版本的bash中使用 -i参数,必须在后面单独加个东西: -i ''-i -r 支持  -ri   支持-ir   不支持-ni   危险选项,会清空文件

2.3 行数匹配

匹配条件分为两种:数字行号或者关键字匹配
数字行号:空 表示所有行				n 表示第n行				$ 表示末尾行n,m 表示第n到m行内容		n,+m 表示第n到n+m行~步进	1~2 表示奇数行		2~2 表示偶数行关键字匹配格式:'/关键字/'注意:隔离符号 / 可以更换成 @、#、!等符号根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可。/关键字1/,/关键字2/ 表示关键字1所在行到关键字2所在行之间的内容n,/关键字2/ 表示从第n行到关键字2所在行之间的内容

2.4 动作详解

动作详解-a[\text]			在匹配到的内容下一行增加内容,支持\n实现多行追加-i[\text]			在匹配到的内容当前行增加内容-c[\text]			在匹配到的内容替换内容-d|p				删除|打印匹配到的内容-s					替换匹配到的内容W /path/somefile 	保存模式匹配的行至指定文件r /path/somefile	读取指定文件的文本至模式空间中=					为模式空间中的行打印行号!					模式空间中匹配行取反处理
注意:上面的动作应该在参数为-i的时候使用,不然的话不会有效果

3. 参数【n】使用详解

不输出模式空间内容到屏幕,即不自动打印所有内容.

3.1 打印指定行数

[root@VM-8-3-centos 20230227]# sed -n '2p' sed.txt
nihao sed4 sed5 sed6
[root@VM-8-3-centos 20230227]#

3.2 过滤IP段 所在行

[root@VM-8-3-centos 20230227]# ifconfig eth0 | sed -n '2p'inet 10.0.8.3  netmask 255.255.252.0  broadcast 10.0.11.255
[root@VM-8-3-centos 20230227]#

3.3 正则匹配到内容

[root@VM-8-3-centos 20230227]# sed -n '/sed4/p' sed.txt
nihao sed4 sed5 sed6
[root@VM-8-3-centos 20230227]#

3.4 输出奇数行

[root@VM-8-3-centos 20230227]# sed -n '1~2p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9

3.5 输出偶数行

[root@VM-8-3-centos 20230227]# sed -n '0~2p' sed.txt
nihao sed4 sed5 sed6
nihao sed10 sed11 sed12

3.6 实现多点输出

[root@VM-8-3-centos 20230227]# sed -n -e '1p' -e '3p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9
[root@VM-8-3-centos 20230227]#

4. 符号【s】详解(内容替换)

4.1 基本格式

命令格式:sed -i [替换格式] [文件名]源数据 | sed -i [替换格式]注意:替换命令的写法's###'  --->  's#原内容##' ---> 's#原内容#替换后内容#'隔离符号 / 可以更换成 @、#、!等符号

4.2 表现形式

表现样式:样式一:替换指定匹配的内容sed -i '行号s#原内容#替换后内容#列号' [文件名]echo "源数据" | sed -i '行号s#原内容#替换后内容#列号'样式二:替换所有的内容sed -i 's#原内容#替换后内容#g' [文件名]echo "源数据" | sed -i '行号s#原内容#替换后内容#g'样式三: 替换指定的内容sed -i '行号s#原内容#&新增信息#列号' [文件名]- 这里的&符号代表源内容,实现的效果是 '原内容+新内容'

4.3 综合案例

4.3.1 替换单个

sed -i "s#sed#SED#" sed.txt

在这里插入图片描述

4.3.2. 替换全部

sed -i "s#sed#SED#g" sed.txt

在这里插入图片描述

4.3.3 指定行号,内容替换

sed -i "2s#sed#SED" sed.txt

在这里插入图片描述

4.3.4 指定列号,内容替换

sed -i "s#sed#SED#2" sed.txt

在这里插入图片描述

5. 符号【a\】增加操作

5.1 基本格式

作用:在指定行号的下一行增加内容
格式:sed -i '行号a\增加的内容' 文件名
注意:如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如sed -i '1,3a\增加内容' 文件名

5.2 综合实践

5.2.1 单行添加

sed -i '2a\ceshi-2' sed.txt

在这里插入图片描述

5.2.2 多行增加

sed -i '1,3a\ceshi--' sed.txt

在这里插入图片描述

6. 插入操作

6.1 基本格式

作用:在指定行号的当行增加内容
格式:sed -i '行号i\增加的内容' 文件名
注意:如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如sed -i '1,3i\增加内容' 文件名

6.2 综合案例

6.2.1 多行插入

sed -i '1,2i\ceshi--' sed.txt

在这里插入图片描述

7. 删除操作

7.1 基本格式

作用:指定行号删除
格式:sed -i '行号d' 文件名
注意:如果删除多行,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如sed -i '1,3d' 文件名

7.2 综合实践

sed -i '1,2d' sed.txt

在这里插入图片描述

8. 进阶匹配

8.1 基本格式

内容匹配:'/关键字内容/'注意:隔离符号 / 可以更换成 @、#、!等符号根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可。/关键字1/,/关键字2/ 表示关键字1所在行到关键字2所在行之间的内容n,/关键字2/ 表示从第n行到关键字2所在行之间的内容/关键字1/,n, 表示从关键字1所在行到第n行之间的内容/关键字1/,+n, 表示从关键字1所在行到(所在行+n行)之间的内容

8.2 综合示例

查看匹配的内容
在这里插入图片描述
多行信息匹配
在这里插入图片描述

匹配内容到第6行内容
在这里插入图片描述

第一个行到匹配的内容
在这里插入图片描述

匹配内容以及下面3行的内容

在这里插入图片描述

9. 修改实践

过滤#开头,以及空行

sed '/^$/d;/^#/d' nginx.conf

在这里插入图片描述

过滤#开头,以及空行。 同时进行备份

sed -i.bak '/^#/d;/^$/d' nginx.conf

在这里插入图片描述

借助& 进行内容替换扩充

head -n 1 /etc/passwd | sed -n 's/root/&user/gp'

在这里插入图片描述

http://www.lryc.cn/news/24506.html

相关文章:

  • 关于sudo配置
  • EEGLAB处理运动想象脑电数据
  • span标签的使用场景
  • Kafka面试问题总结
  • FPGA案例开发手册——基于全志T3+Logos FPGA核心板
  • 或许你想要的画图工具在这里
  • 2023年功能测试还值得入行吗?
  • 2022-2023山东大学机器学习期末回忆及复习建议
  • 基于ssm框架实现家庭理财收支系统(源码+数据库+文档)
  • MyBatis - 09 - 自定义映射resultMap
  • springBoot常见面试题(2023最新)
  • YOLOv5全面解析教程⑤:计算mAP用到的Numpy函数详解
  • Linux入门---基本指令(下)
  • mysql基础操作1
  • nginx-ingress部署+跨命名空间转发
  • 耗时1个月整理的网络安全学习路线,不信还有比这更详细的
  • ChatGPT进阶-提示词中文版
  • Linux 进程:进程状态
  • 应用程序性能优化方案,web服务五级缓存优化,服务器性能优化...
  • 云计算简介
  • 两个适配器网络冲突,限制访问特定网址
  • 电子科技大学 高级计算机系统结构 考试回忆
  • 【设计模式】18.观察者模式
  • 软测入门(一)测试理念及基础知识
  • 2022年“网络安全”赛项山东省菏泽市选拔赛任务书
  • LeetCode练习四:栈
  • 【Python实战】爬虫教程千千万,一到实战全完蛋?今天手把手教你一键采集某网站图书信息数据啦~排名第一的竟是...(爬虫+数据可视化)
  • 【数据结构】堆的详解
  • New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了
  • 简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)