Shell脚本攻略:文本三剑客之sed

目录

一、理论

1.sed

二、实验

1.sed命令的寻址打印

2.显示奇偶

 3.查找替换

4.后向引用


一、理论

1.sed

(1) 概念

sed 英文全称为stream editor流式编辑器,sed 对输入流(文件或来自管道的输入)执行基本文本转换单通过流,所以效率很高。 但是, sed 能够管道过滤文本,特别区别于其他类型的编辑器。

sed 可以在命令行或 shel l脚本中使用,以非交互方式编辑文件。 也许最有用的功能是对一个字符串进行 “搜索和替换” 到另一个字符串。

sed最为核心的功能是增删改查。

(2)sed语法格式和工作流程

语法格式:

sed 选项 ’定位 操作符’ 文件路径

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

# 注:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才不是0

工作流程:

sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在
临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完
成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
改变,除非你使用重定向存储输出,或者使用sed -i选项
-i选项就是将本该输出到屏幕上的内容输出/流入文件中

(3)sed命令的常用选项

表1 sed命令的常用选项

选项功能
-e表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 表示用指定的脚本文件来处理输入的文本文件
-h 显示帮助
-i直接修改目标文本文件 慎用
-i.bak修改文件时会创建备份文件,防止手误
-n仅显示script处理后的结果

(4)sed命令的操作符 

表2 sed命令的操作符 

操作符功能
s///替换,替换指定字符。
d删除,删除选定的行。
aappend增加,在当前行下面增加一行指定内容。
iinsert插入,在选定行上面插入一行指定内容。
c替换,将选定行清除后替换为c后面指定内容。
y字符转换,转换前后的字符长度必须相同。
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,
则以 ASCII 码输出。其通常与“-n”选项一起使用。
=打印行号。
l(小写L)打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
r扩展正则表达式

        ①查操作

          根据内容筛选文件信息
          根据行号筛查文件信息

       ② 删除指定内容

表3 删操作

编辑命令含义
1d删除第1行的内容
1,5d删除1行到5行的内容
2,+5d删除第2行以及往下的5行的内容
/pattern1/d删除每行中匹配到pattern1的行内容
/pattern1/,/pattern2/d删除匹配到pattern1的行直到匹配到pattern2的所有行内容
/pattern1/,10d删除匹配到pattern1的行到10行的所有行内容
10,/pattern1/d删除第10行直到匹配到pattern1的所有内容

         ③ 修改文件信息

表4 改操作

命令含义
1s/old/new/替换第1行内容old为new
1,10s/old/new/替换1行到10行的内容old为new
1,+5s/old/new/替换1行到6行的内容old为new
/pattern1/s/old/new/替换匹配pattern1的内容old为new
/pattern1/,/pattern2/s/old/new/替换匹配到pattern1的行直到
匹配到pattern2的所有行内容old为new
/pattern1/,/pattern2/s/old/new/替换匹配到pattern1的行直到
匹配到pattern2的所有行内容old为new

                    替换指定内容

                  后向引用

                 ( )内的按顺序标为123 ,引用时\1调用第一个()的内容,\n表示调用第n个()的内容。

                .*表示任意长度字符不管是什么字符

                 's///'查找替换标准格式。

         ④  增加内容

表4 增加操作

命令含义
a行后追加内容 append
i行前追加内容 insert
r读入外部文件,行后追加
w将匹配行写入外部文件

            在当前行下面增加一行指定内容

(5)sed命令的打印功能

       ①查看文件内容

    ② 支持重定向输入

        sed '' < /etc/fstab

    ③ 支持管道符

        cat /etc/passwd |sed ''

    ④ 默认打印方式

       1)  sed有一个默认输出,加上P,会打印两行:

               sed -e 'p' test.txt

       2)-n禁止了默认输出,就只有一行:

               sed -n 'p' test.txt 

(6)sed命令的寻址打印

  方式一:按照行号寻求内容

表3 按照行号寻求内容

命令功能
sed -n '1p' test.txt打印第一行
sed -n '4p' test.txt打印第四行
sed -n '$p' test.txt打印最后一行

  方式二:进行行号范围区间的打印

表4 进行行号范围区间的打印

命令功能
sed -n '1,3p' test.txt打印1-3行
sed -n '5,$p' test.txt打印第五行到最后一行
sed -n '2,+2p' test.txt打印第二行+两行的内容,相当于2,4p
sed -n '3p;5p' test.txt输出第三行和第五行

  方式三:指定间隔打印

表5 指定间隔打印

命令功能
sed -n -e '2p' -e'$p' test.txt打印第二行和最后一行
sed -n -e '2p' -e'3p' test.txt打印第二行和第三行

  方式四:对奇数行和偶数行的打印

n在p前面,跳过一行,打印下一行,就是偶数行;在后面,就是打印第一行,然后跳过一行,形成奇数行:

表6 对奇数行和偶数行的打印

命令功能
sed -n 'n;p' test.txt打印偶数的行
sed -n 'p;n' test.txt 打印奇数的行

(7)文本模式过滤行内容

方式一:对包含的字符串进行过滤打印

表7 对包含的字符串进行过滤打印

命令功能
sed -n '/o/p' test.txt包含o的所有行
sed -n '/th/p' test.txt包含th的所有行

方式二:应用基础正则表达式进行打印

表8 应用基础正则表达式进行打印

命令功能
sed -n  '/^root/p' /etc/passwd以root为开头的所有内容,全文本搜索
sed -n  '/bash$/p' /etc/passwd以bash结尾的所有内容,全文本搜索
sed -n  '4,/bash$/p' /etc/passwd从第四行开始,一直打印到第一个以bash为结尾的所在行

方式三:使用扩展正则表达式进行打印

注意: 
sed -r 支持扩展正则表达式。同时在 使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\ 。

表9 使用扩展正则表达式进行打印

命令功能
sed -r -n  '/(99:){2,}/p' /etc/passwd包含有两个99:的内容所在行
sed -r -n  '/^root|bash$/p' /etc/passwd 包换以root开头,或者以bsah结尾的内容所在行

(8)sed的查找替换使用

格式:sed '/可使用正则表达式选择范围/'s/查找内容/替换内容/g g表示全文,固定格式的///可以用###等符号替换

注意:查找内容可使用正则表达式,替换内容不可使用正则表达式

二、实验

1.sed命令的寻址打印

(1)查看文件

(2) 显示默认输出(输出2遍)

sed有一个默认输出,加上P,会打印两行。

    (3) 不显示默认输出

            -n禁止了默认输出,就只有一行

       (4) 打印第二行

       (5) 打印最后一行

       (6) 只显示行号

      (7)  显示行号和每行的内容

          ;表示和    

 (8)  显示1到3行  

           ,表示到

 (9)  显示区间

 

(10)  分开显示

(11)  显示第2-4行

2.显示奇偶

(1)显示奇数(每间隔1个打印一次)

   ~ 步进,1~2,1个间隔

(2)显示偶数(每间隔2个打印一次)

   ~ 步进,0~2,2个间隔

(3)显示奇数行

先跳行next ;输出行

(4)显示偶数行

先输出首行;下一行跳

 3.查找替换

(1)以root为开头的所有内容,全文本搜索

(2)以bash结尾的所有内容,全文本搜索

(3)从第30行开始,一直打印到第一个以bash为结尾的所在行

(4)使用扩展正则表达式进行打印

 包含有两个99:的内容所在行

 包换以root开头,或者以bsah结尾的内容所在行

4.后向引用

(1)取IP地址

(2)反向输出

(3)批量修改扩展名

① 将1行多列内容显示为多行1列

② 将文件后缀名.txt批量 修改为.jpg

③ 批量生成用户

 ④ 备份文件

备份

cp /etc/yum.repos.d/CentOS-Base.repo{,.bak}

还原

 cp /etc/yum.repos.d/CentOS-Base.repo{.bak,}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Matlab进阶绘图第22期—不等宽柱状图

不等宽柱状图是一种特殊的柱状图。 与常规柱状图相比&#xff0c;不等宽柱状图可以通过柱高与柱宽分别表达两个维度的数据&#xff0c;因此在多个领域得到应用。 在《Matlab论文插图绘制模板第91期》中&#xff0c;虽有介绍过利用Matlab自带bar函数绘制不等宽柱状图的方法&am…

高完整性系统(7)Formal Verification and Validation

文章目录 Specification Process 规格化过程State Invariants案例check ... expect Alloy是一种用于构建和检查抽象模型的语言和工具。当Alloy说所有断言都成立时&#xff0c;这意味着你的模型或规格在给定范围内已成功通过了所有的断言检查。换句话说&#xff0c;对于你所定义…

C#实例:多功能Windows窗体应用程序Helloworld_WinForm

有了创建一个Windows窗体应用程序的经验&#xff0c;就可以开始尝试运用更多的控件实现更多丰富的功能界面。以下分享我基于项目Helloworld_WinForm使用常用C#Windows窗体控件实现一些小功能。 每一节标题为所用到的控件&#xff0c;全文以实际制作过程为序编制。 目录 WinFor…

来了解一下白盒测试,黑盒测试,灰盒测试吧(超详解~)

根据被测对象的不同&#xff0c;软件测试可以分为白盒测试、黑盒测试、灰盒测试三种方式。那么&#xff0c;这三种测试方式具体是如何运行的&#xff1f;各有什么特点&#xff1f;下面&#xff0c;跟着静姐一起了解一下吧&#xff01; 01、白盒测试 WHITE BOX ●概念&#x…

PACS影像解决方案

现代医学影像技术的迅猛发展&#xff0c;使得PACS系统已逐渐成为各级医院实现信息化建设的重要组成部分。医学影像技术的进步也提升了医学影像的清晰度&#xff0c;推动二维PACS向三维升级转变。这一切都使得医学影像数据量激增&#xff0c;加之医疗行业法规的数据保存要求&…

Android平台OpenCV入门

一、导入OpenCV 别忘记把libopencv_java3.so添加进来。 二、初始化 OpenCVLoader.initDebug();三、常用方法 1. CvType 数据类型 以CV_64FC2为例&#xff0c;64指64位&#xff0c;F指浮点数&#xff0c;C指通道&#xff0c;2为2通道。 数值具体类型取值范围CV_8U8 位无符…

软件工程导论(四)软件编码测试与维护

一、软件编程 1.1良好的编程习惯 变量命名有意义并且使用统一的命名规则 编写自文档代码&#xff08;序言性注释 or 行内注释&#xff09; 提前进行可维护性考量&#xff08;可以用常量的方式存在的数值最好以变量的方式存在&#xff09; 良好的视觉安排可以提高代码的可读性(…

SOLIDWORKS技巧培训-绘制零件滚花的两种方法

最近常有朋友咨询SolidWorks零件如何做滚花的效果&#xff0c;下面给大家整理了绘制零件滚花的一个培训教程&#xff1a; 作为机械设计师&#xff0c;滚花应该都不陌生&#xff0c;真要说起来&#xff0c;滚花绘制其实也不算难&#xff0c;跟着我们一步一步来&#xff0c;应该…

ThreeJS 炫酷特效旋转多面体Web页 Demo 01《ThreeJS 炫酷特效制作》

本案例为一个 threejs 的特效网页&#xff0c;大小球体进行包裹&#xff0c;外球体为透明材质&#xff0c;但是进行了线框渲染&#xff0c;使其能够通过外球踢查看其内球体。 注&#xff1a;案例参考源于互联网&#xff0c;在此做代码解释&#xff0c;侵删 本案例除 ThreeJS 外…

chatgpt赋能python:Python如何分割列表

Python如何分割列表 介绍 在Python编程中&#xff0c;列表是一种非常常见的数据类型。有时候我们需要将一个大的列表分割成几个小的列表&#xff0c;以便更好地处理数据。Python提供了多种方法来实现这个目的。在本文中&#xff0c;我们将介绍Python中如何分割列表的几种方法…

活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术

在当今数字化时代&#xff0c;数据库是各行各业中最核心的信息管理系统之一。随着技术的飞速发展&#xff0c;数据库领域也不断涌现出新的前沿技术和创新应用。数据库运维和开发人员需要紧跟前沿技术&#xff0c;才能保持竞争力&#xff0c;并实现更高效、更智能、更人性化的应…

pytorch实战 -- 神经网络

softmax的基本概念 交叉熵损失函数 模型训练和预测 在训练好softmax回归模型后&#xff0c;给定任一样本特征&#xff0c;就可以预测每个输出类别的概率。通常&#xff0c;我们把预测概率最大的类别作为输出类别。如果它与真实类别&#xff08;标签&#xff09;一致&#xff0…

Java 数组

文章目录 一、Java 数组总结 一、Java 数组 Java 语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量&#xff0c;如 numbers[100] 来代替直接声明 100 个独立变量 number0&#xff0c;number1&#xff0c;…&#xff0c;number99。 Java 数组的声明、…

Linux内存初始化-启动阶段的内存初始化

本文代码基于ARM64平台, Linux kernel 5.15 在加载kernel 之前&#xff0c; kernel对于系统是有一定要求的&#xff0c;明确规定了boot阶段必须要把MMU关闭&#xff1a; arch/arm64/kernel/head.S/** Kernel startup entry point.* ---------------------------** The require…

黑马Redis视频教程实战篇(六)

目录 一、附近商户 1.1、GEO数据结构的基本用法 1.2、导入店铺数据到GEO 1.3、实现附近商户功能 二、用户签到 2.1、BitMap功能演示 2.2、实现签到功能 2.3、签到统计 2.4、关于使用bitmap来解决缓存穿透的方案 三、UV统计 3.1、HyperLogLog 3.2、测试百万数据的统…

【HarmonyOS】初识低代码平台开发元服务

【关键字】 HarmonyOS、低代码平台、元服务开发、拖拽式开发 【写在前面】 今天要分享的是HarmonyOS中的低代码开发相关的内容&#xff0c;低代码开发是DevEco Studio提供的一种UI界面可视化的构建方式&#xff0c;通过图形化的自由拖拽数据的参数化配置&#xff0c;可以快速…

2419286-92-1,Sulfo-Cy5.5 NHS ester,磺酸基Cyanine5.5-活性酯,用于标记抗体

Sulfo-Cyanine5.5 NHS ester&#xff0c;sulfo Cy5.5(Et) NHS&#xff0c;sulfo Cy5.5 SE&#xff0c;磺酸基Cy5.5-活性酯 &#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ 产品结构式&#xff1a; 产品规格&#xff1a; 1…

SAP-MM-发票-采购附加成本处理简介

一&#xff0e;采购附加成本处理&#xff1a; 原材料的采购成本包括采购成本&#xff08;采购单价*采购数量&#xff09;和相关采购附加成本&#xff08;运输费、保险费、报关费、仓储费、滞期费、租船费、码头费及代理费等费用&#xff09;&#xff0c;对于采购附加成本主要有…

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建 文章目录 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建1. 传统推荐系统模型2. 协同过滤算法3. 基于双视角图表示学习算法的模型构建3.1 数据输入3.2 双视角交互图的构建3.3 混合偏好传播策略3.4 对于双向意…

git使用X篇_2_Git全套教程IDEA版(git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容)

本文是根据以下视频及网上总结进行更新后的介绍git使用的博文。包含了git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容。 笔记来源&#xff1a;【尚硅谷】5h打通Git全套教程IDEA版&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 文章目录 初识 Git0、内容…