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

news2024/11/16 17:42:55

目录

一、理论

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,}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器部署vue

1.下载及安装 打开服务器终端&#xff0c;在终端中输入以下命令&#xff0c;下载nginx安装包。 wget http://nginx.org/download/nginx-1.20.2.tar.gz其中nginx版本可以自己选择&#xff0c;具体版本可查看此链接&#xff1a;nginx news 将下载的压缩包解压&#xff0c;输入指…

chatgpt赋能python:Python列表升序排序:完美的排序方案

Python列表升序排序&#xff1a;完美的排序方案 Python是一种高级编程语言&#xff0c;广泛应用于各种领域&#xff0c;涵盖了从Web开发&#xff0c;数据科学到人工智能。Python强大的语法使其容易编写复杂的程序并处理大型数据集&#xff0c;而Python列表最常用于存储和操作数…

华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

一、题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏。 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格&#xff0c;然后获得一次选房子的机会&#xff0c;直到所有房子都被选完&#xff0c;房子最多的人获胜。 跳房子的过程中&…

路径规划算法:基于平衡优化器优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于平衡优化器优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于平衡优化器优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能…

MySQL数据库从入门到精通学习第8天(数据表的查询)

数据表的查询 基本查询语句单表查询聚合函数查询多表连接查询子查询合并查询结果定义表和字段的别名使用正则表达式查询 基本查询语句 SELECT 语句非常的强大&#xff0c;是最常用的查询语句。他具有一个固定的格式&#xff0c;如下&#xff1a; SELECT 查询的内容 FROM 数据…

markdown标注

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

MySQL进阶 -- 存储过程 和 触发器

目录 存储过程介绍存储过程的基本语法变量系统变量用户自定义变量局部变量 if判断 存储过程 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合&#xff0c;可以直接调用这些集合&#xff08;存储过程&#xff09;&#xff0c;调用存储过程可以简化应用开发人…

系列一、MongoDB简介特点应用场景

一、概述 1.1、官方 翻译&#xff1a;MongoDB是一个文档型数据库&#xff0c;旨在方便应用开发和扩展。 1.2、百度百科 1.3、总结 MongoDB 是一个非关系型文档数据库。 二、特点 面向集合存储&#xff0c;易存储对象类型的数据&#xff1b;支持查询以及动态查询&#xff1b…

在 Python 中实现最小堆

树是一种非线性数据结构&#xff0c;其中元素排列在多个级别。 堆是一种基于树的数据结构。 它是一棵完全二叉树&#xff0c;即每个父节点都有两个子节点。 堆实现不同的算法&#xff0c;对其他结构进行排序&#xff0c;对队列进行优先排序等。 堆有两种类型 - 最大和最小。 …

【计算机组成原理·笔记】总线控制

总线控制 总线上连接多个部件&#xff0c;为了解决&#xff1a; 什么时候由哪个部件发送信息如何给信息传送定时如何防止信息丢失如何避免多个部件同时发送如何规定接受信息的部件 等一些列问题&#xff0c;需要总线控制线进行统一管理&#xff0c;这就是总线控制&#xff0…

必须有公网IP吗?内网穿透如何实现外网访问

很多中小型公司或个人都有将自己内网的服务、应用&#xff0c;如远程桌面、网站、数据库、公司的管理系统、FTP、管家婆、监控系统等等&#xff0c;发布到外网&#xff0c;实现异地访问的需求。但往往面临一个普遍的问题&#xff0c;就是没有公网IP&#xff0c;即没有IP v4的公…

KEYSIGHT是德DSOX4034A 示波器 350 MHz

KEYSIGHT是德DSOX4034A 示波器 350 MHz&#xff0c;是德4000 X 系列拥有一系列引以为傲的配置&#xff0c;包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom IV 智能存储器技术和标配分段存储器。 是德DSO-X4034A 主要特…

scrcpy: 在电脑上使用Android手机

文章目录 1. 目的2. 配置2.0 配置思路2.1 安装 scrcpy 2.02.2 添加 udev 规则2.3 手机设置权限2.4 开启 scrcpy 1. 目的 打算在电脑上使用手机上的 App&#xff0c;如京东读书&#xff0c;或QQ。不用电脑版对应软件的原因是&#xff0c;电脑上需要重新登录&#xff0c;有些软件…

JSP SSM 学生综合测评管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM 学生综合测评管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主…

零基础快速搭建私人影音媒体平台

目录 1. 前言 2. Jellyfin服务网站搭建 2.1. Jellyfin下载和安装 2.2. Jellyfin网页测试 3.本地网页发布 3.1 cpolar的安装和注册 3.2 Cpolar云端设置 3.3 Cpolar本地设置 4.公网访问测试 5. 结语 转载自cpolar极点云的文章&#xff1a;零基础搭建私人影音媒体平台【…

RabbitMQ集群架构模式

搭建Mirror镜像集群&#xff1a; 4369是erlang的发现端口 5672是rabbitmq的通信端口 15672是rabbitmq的可视化控制台的端口号 25672是erlang底层发送消息和分配消息的底层端口 firewall-cmd --zonepublic --add-port4369/tcp --permanent firewall-cmd --zonepublic --add-port…

Springboot+vue.js高校校园社交个人博客相册网站系统

基于java语言设计并实现了高校社交系统。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用Springboot框架&#xff0c;选择MySQL作为后台数据库。系统主要包括用户、个人动态、个人相册、动态类型、留言板、交流论坛等功能模块。近几年来&#xff0c;由于计算机技术的快速…

chatgpt赋能python:Python列表中如何找出前三名成绩

Python列表中如何找出前三名成绩 在数据分析和编程中&#xff0c;Python语言被广泛使用。其中&#xff0c;列表是Python中最常用的数据类型之一。列表可以存储多个值&#xff0c;并且这些值可以是不同的数据类型。Python列表很强大&#xff0c;因为它提供了许多内置函数和方法…

划水2年半,薪资还没新人多,不要太真实...

上个月公司来了许多新面孔&#xff0c;其中一个是个00后&#xff0c;这位兄弟毕业后&#xff0c;在某软件公司干了一年&#xff0c;现在跳槽到我们公司薪资20K&#xff0c;已经超过公司很多老油条了。因为我和他年纪相差不大&#xff0c;所以和他聊得来&#xff0c;才知道&…

Educational Codeforces Round 149 (Rated for Div. 2)(A—D、F)

文章目录 A. Grasshopper on a Line1、问题2、分析3、代码 B. Comparison String1、问题2、分析3、代码 C. Best Binary String1、问题2、分析3、代码 D. Bracket Coloring1、问题2、分析3、代码 E. Playoff Fixing1、问题2、分析3、代码 F. Editorial for Two1、问题2、分析3、…