shell编程系列(8)-使用sed处理文本

文章目录

  • 引言
  • sed用法详解
    • 在文本中定位
    • 打印文本
    • 替换文本
    • 删除文本
    • 新增文本
  • 结语

引言

在日常工作学习中我们都会遇到要编辑文本的场景,例如我们要用vim或者nano等命令去编辑代码,处理文本文件等,这些命令的特点都是需要我们进行交互式的实时处理,但是如果我们需要在shell脚本去完成一些文本编辑处理,那该怎么办呢?
接下来就介绍一下sed命令,sed命令提供了处理文本的能力包括编辑、删除文本等,我们可以利用sed命令,在shell脚本中二次处理文本。

sed用法详解

其实sed命令功能是比较强大的,他本身也是一个脚本解释器,我们可以将sed指令编写成脚本文件,只需要在脚本文件的第一行声明#!/bin/sed即可,这种使用方式是在我们要处理较为复杂的任务时才会用到。
其实博主最常用的方式还是把sed当作命令来处理一些简单的文本操作,在本篇文章中介绍的用法,都是把sed当作命令来使用,具体的sed脚本的编写如果有同学感兴趣再专门介绍吧。
首先sed命令的用法如下:

# option 可选参数,用来控制sed行为
# command 子命令,下面会详细介绍
# inputfile 可以是文件,或者是输入流
sed [option] command inputfile

options选项如下(做了解即可):

选项说明
-n取消默认输出。
-e允许执行多个脚本。
-f从脚本文件中读取命令。
-i直接修改原始文件。
-l指定行的长度。
-r在脚本中使用扩展正则表达式。
-s默认情况下,sed将把命令行指定的多个文件名作为一个长的连续的输入流。而GNU sed则允许把它们当做单独的文件,这样的话,正则表达式不进行跨文件匹配。
-u最低限度的缓存输入与输出。

command子命令

命令说明
a新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d删除,因为是删除啊,所以 d 后面通常不接任何参数;
i插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!

在文本中定位

把大象放进冰箱一共分3步的梗大家应该都听说过,其实sed命令的使用也是类似的,使用sed命令只有2步,第一步 定位我们要编辑的行,第二步 编辑它。
再sed中定位文本行有两种方式:
方式一:使用行号定位
使用行号定位是指我们清楚的知道我们要处理哪一行,例如有一个文本文件,我们想在该文件的第1行加一些备注说明,或者我们想删除该文件的第3行,这种情况下,我们可以使用行号直接定位。示例如下:
首先,我们提前准备一个fruit.txt 文本文件作为实验文件,后面的示例都会使用这个文件,文件内容如下:
在这里插入图片描述
然后我们使用sed命令打印第一行(打印命令下面会介绍,这里主要演示行号定位),如下:

# -n 是取消默认输出,sed命令默认会将源文件内容都打印出来
# 1p 代表打印第一行,p是打印的意思,后面会讲到
sed -n 1p fruit.txt

结果如下:
在这里插入图片描述
我们也可以打印,连续的几行,如下:

sed -n 2,3p fruit.txt

结果如下,可以看到打印了第二和第三行:
在这里插入图片描述

方式二: 使用正则表达式定位
使用正则表达式定位,需要我们对正则表达式有一定的了解,正则表达式是一种功能强大的按规则匹配字符串的工具,网上教程都比较丰富,这里就不在赘述。
sed命令也支持正则表达式来定位我们要操作的文本行,例如我们要操作包含有关键字‘abc’的行,但是我们不知道是哪一行,就可以用正则表达式定位,正则表达式定位,需要将表达式放在 / / 之间,示例如下:
我们打印带有关键字‘an’的行

# 将正则表达式‘an’用/包裹起来, p代表打印
sed -n /an/p fruit.txt

结果如下,可以看到打印了orange和banana:
在这里插入图片描述

打印文本

打印文本的子命令是p 其实在上面将文本定位时候的示例都使用到了这个功能,这里就不重复演示了,这个功能主要是帮助我们打印我们想要的行,然后为下一步做准备。

替换文本

替换文本的子命令是s ,sed可以帮我们在文本内全局或者局部替换文本,例如我们想将某些单词转为大写。
示例如下,我们将fruit.txt文件中的an全部换成大写的AN:

sed -n s/an/AN fruit.txt

在这里插入图片描述
注意:

  1. 这里的替换并不会回写到源文件中,sed将an替换为AN之后,默认写入输出流里了,如果没有后续处理那么就会直接打印到终端。

删除文本

删除文本的子命令是d,可以删除我们不需要的行,示例如下:

  1. 删除fruit文件第一行:
sed 1d fruit 

结果如下
在这里插入图片描述
2. 删除带关键字‘an’的行,这里使用正则定位然后删除

sed /an/d fruit.txt

结果如下,banana和orange都被删除了
在这里插入图片描述

新增文本

新增文本行的子命令有两个ai,其中 a代表在指定位置的后面追加(append),i代表在指定位置前插入(insert)。示例如下:

  1. 我们在fruit.txt文件第二行后面追加一行grape, 如下;
sed '2 a grape' fruit.txt

结果如下:
在这里插入图片描述

  1. 在最后一行的前面插入cherry ,如下:
sed '$ i cherry' fruit.txt

结果如下:
在这里插入图片描述

注意:

  1. sed对文本的修改都不会回写到原文件里,而是写入到了输出流,默认就是终端,所以sed命令并不会破坏原来的文件

结语

sed命令其实还有很多用法这里都没有列出来,只是挑了一些博主认为常用的功能介绍,如果感兴趣可以通过 man sed命令,查询最全的使用说明。

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

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

相关文章

Set系列的集合

无序: 存取的顺序不一样 不重复:可以去重 无索引:不能使用普通for进行遍历,也不能通过索引获取元素 Set集合的实现类 HashSet:无序,不重复,无索引 LinkedHashSet:有序&#xff…

【报名】2023产业区块链生态日暨 FISCO BCOS 开源六周年生态大会

作为2023深圳国际金融科技节系列活动之一,由深圳市地方金融监督管理局指导,微众银行、金链盟主办的“2023产业区块链生态日暨FISCO BCOS开源六周年生态大会”将于12月15日下午14:00在深圳举办。 今年的盛会将进一步升级,以“FISCO BCOS和TA的…

自定义函数中的(int*a,int*b)与(int*a,int n)

事实上第一种更安全,不会因越界发生占位,从而导致错误。

三个方法,rar格式转换为zip压缩包

今天和大家分享三个rar压缩包改成zip格式的方法,希望能够帮助到大家! 方法一: 直接修改rar压缩包的后缀名变为zip,就可以修改压缩包文件格式了 方法二: 先将rar压缩包解压出来,然后再将解压出的文件进行…

【技术分享】远程透传网关-单网口快速实现西门子S7-200 串口PLC程序远程上下载

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条,用于实现网络连接一台西门子S7-200 PLC及其编程软件一个9针串口头及连接线,用于连接PLC一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡,WIFI联…

Ascend C 算子开发遇到的问题及解决方法

摘要:在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。 首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要…

fastadmin列表头部加按钮,点击弹出窗口提交数据保存

index.html <a href="{:url(pattern/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(pattern/piliangadd)?:hide}" title="批量添加" ><i class="fa fa-plus"></i> 批量添加…

ThreadPoolExecutor线程池内部处理浅析

我们知道如果程序中并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束时&#xff0c;会因为频繁创建线程而大大降低系统的效率&#xff0c;因此出现了线程池的使用方式&#xff0c;它可以提前创建好线程来执行任务。本文主要通过java的ThreadPoolEx…

Python自动化办公:PDF文件的分割与合并

我们平时办公中&#xff0c;可能需要对pdf进行合并或者分割&#xff0c;但奈何没有可以白嫖的工具&#xff0c;此时python就是一个万能工具库。 其中PyPDF2是一个用于处理PDF文件的Python库&#xff0c;它提供了分割和合并PDF文件的功能。 在本篇博客中&#xff0c;我们将详细…

Sass 语法详细介绍

文章目录 前言SASS缩进语法SASS的语法差异多线选择器注释import Mixin指令已弃用的语法后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正…

VR全景对旅游业有什么帮助,如何助力旅游业实现新的旅游形式

引言&#xff1a; 旅游业是一个充满机遇的行业&#xff0c;而虚拟现实&#xff08;VR&#xff09;全景技术正逐渐改变着旅游业的面貌&#xff0c;通过提供身临其境的体验&#xff0c;VR全景成为了旅游业的新宠&#xff0c;将旅游带入了一个全新的数字化时代。 一、打破地域限制…

C陷阱与缺陷——第6章 预处理器

在严格意义上的编译过程开始之前&#xff0c;C语言预处理器首先对程序代码做了必要的转换处理。预处理器的主要作用是&#xff1a; 我们有时需要将某个特定数量在程序中出现的所有实例统统加以修改大多数C语言实现在函数调用时都会带来重大的系统开销 1. 不能忽视宏定义中的空…

Elasticsearch:为现代搜索工作流程和生成式人工智能应用程序铺平道路

作者&#xff1a;Matt Riley Elastic 的创新投资支持开放的生态系统和更简单的开发者体验。 在本博客中&#xff0c;我们希望分享 Elastic 为简化你构建 AI 应用程序的体验而进行的投资。 我们知道&#xff0c;开发人员必须在当今快速发展的人工智能环境中保持灵活性。 然而&a…

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明&#xff0c;以及一些注意事项&#xff0c;为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

爱芯元智AX650N部署yolov8s 自定义模型

爱芯元智AX650N部署yolov8s 自定义模型 本博客将向你展示零基础一步步的部署好自己的yolov8s模型&#xff08;博主展示的是自己训练的手写数字识别模型&#xff09;&#xff0c;本博客教你从训练模型到转化成利于Pulsar2 工具量化部署到开发板上 训练自己的YOLOv8s模型 准备自…

机器视觉新功能上线:同步训练多个模型,智造的脚步又加快了!

“AI视觉”的应用&#xff0c;为当下诸多企业的生产智能化打开了新的想象空间。其中&#xff0c;深度学习作为AI视觉的核心技术&#xff0c;在实际应用中往往需要经历一个耗时较长的阶段——深度学习神经网络模型训练。其目的是通过使用已标注的数据集来训练模型&#xff0c;使…

Inference with C# BERT NLP Deep Learning and ONNX Runtime

目录 效果 测试一 测试二 测试三 模型信息 项目 代码 下载 Inference with C# BERT NLP Deep Learning and ONNX Runtime 效果 测试一 Context &#xff1a;Bob is walking through the woods collecting blueberries and strawberries to make a pie. Question …

传统算法:使用 Pygame 实现插入排序

使用 Pygame 模块实现了插入排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过插入排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序将当前元素插入到已排序的部分,通过适度的延迟…

每日一练2023.12.1——输出GPLT【PTA】

题目链接&#xff1a;L1-023 输出GPLT 题目要求&#xff1a; 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序&#xff0c;按GPLTGPLT....这样的顺序输出&#xff0c;并忽略其它字符。当然&#xff0c;四种字符&#xff08;不区分大小写&#x…

《opencv实用探索·七》一文看懂图像卷积运算

1、图像卷积使用场景 图像卷积是图像处理中的一种常用的算法&#xff0c;它是一种基本的滤波技术&#xff0c;通过卷积核&#xff08;也称为滤波器&#xff09;对图像进行操作&#xff0c;使用场景如下&#xff1a; 模糊&#xff08;Blur&#xff09;&#xff1a; 使用加权平…