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

linux三剑客~sed命令的使用

1.工作原理:

  • sed是一种流编辑器,它是文本处理中非常有用的工具

  • 能够完美的配合正则表达式使用,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容

  • 处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变

  • sed的特点:

    • sed命令是将一系列的编辑命令应用于一批文本的理想工具

    • sed命令是一个非交互式的文本编辑器,它可以对来自文本文件以及标准输入的文本进行编辑。其中,标准输入可以是来自键盘、文件重定向、字符串、变量或者是管道的文本

    • sed命令会从文件或者标准输入中一次读取一行数据,将其复制到缓冲区(最多8192字节),然后读取命令行或者脚本的编辑子命令,对缓冲区中的文本行进行编辑。重复此过程,一直到所有的文本行都处理完毕

2.sed基本语法:

  • 语法:

    sed OPTIONS… [SCRIPT] [INPUTFILE…]

  • 参数:

    常用的选项说明
    -n,--quiet,--silent只打印匹配的行
    -i直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作;
    -e直接在命令行模式上进行sed的动作编辑,不会对原文件修改
    -r使用扩展正则表达式
    -f直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作
    [root@quruixiang ~]# sed -n '3p' /etc/passwd

3.模式空间中的编辑操作:

  • 地址定界:(查询)

    # 1)#:#为数字,指定要进行处理操作的行;1,表示第一行;
    [root@quruixiang ~]# sed -n '3,4p' /etc/passwd
    ​
    # 2)$:表示最后一行,多个文件进行操作的时候,为最后一个文件的最后一行;
    [root@quruixiang shellstudy]# sed -n '$p' test8.sh
    ​
    # 3)/regexp/:表示能够被regexp匹配到的行;
    [root@quruixiang ~]# sed -n "/test/p" /etc/passwd
    ​
    ## regexp即基于正则表达式的匹配;
    # 4)/regexp/I:匹配时忽略大小写;
    [root@quruixiang shellstudy]# sed -n "/test/Ip" /etc/passwd
    ​
    # 5)\%regexp%: 任何能够被regexp匹配到的行,换用%(用其他字符也可以,如:#)为边界符号;
    [root@quruixiang shellstudy]# sed -n "\%echo%p" test8.sh
    ​
    # 6)addr1,addr2:指定范围内的所有的行(范围选定);
    [root@quruixiang ~]# sed -n "3,6p" /etc/passwd
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    ​
    # 常用地址定界表示方式:
    ## a)0,/regexp/:从起始行开始到第一次能够被regexp匹配到的行。
    [root@quruixiang shellstudy]# sed -n "0,/bin/p" test8.sh 
    ​
    ## b)/regexp/,/regexp/:被模式匹配到的行内的所有的行。
    ## 7)first~step:指定起始的位置及步长,例如:1~2表示1,3,5…
    [root@quruixiang shellstudy]# sed -n "1~3p" test8.sh 
    #!/bin/bash
    #Version:v1.0
    #Description:
    func()echo 1fi    
    echo $result
     
    ## 8)addr1,+N:指定行以及以后的N行;
    [root@quruixiang ~]# sed -n "3,+4p" /etc/passwd
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ​
    ### addr1,~N:addr1开始的行,N结束的行
    [root@quruixiang ~]# sed -n "3,~4p" /etc/passwd
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin

  • 注意事项:

    • 如果没有指定地址,表示命令将应用于每一行

    • 如果只有一个地址,表示命令将应用于这个地址匹配的所有行

    • 如果指定了由逗号分隔的两个地址,表示命令应用于匹配第一个地址和第二地址之间的行(包括这两行)

    • 如果地址后面跟有感叹号,表示命令将应用于不匹配该地址的所有行

  • 常用编辑命令:(编辑)

    # 1)d:删除匹配到的行
    [root@quruixiang shellstudy]# sed '3d' test8.sh
    [root@quruixiang shellstudy]# sed '/echo/d' test8.sh
    [root@quruixiang shellstudy]# sed '/^$/d' test8.sh     # 删除空行
    ​
    # 2)p:打印当前模式空间内容
    [root@quruixiang shellstudy]# sed '/echo/p' test8.sh
    ​
    # 3)a \text:append,表示在匹配到的行之后追加内容
    [root@quruixiang shellstudy]# sed '$a\system' test8.sh
    [root@quruixiang shellstudy]# sed '3a\systemctl' test8.sh
    [root@quruixiang shellstudy]# sed '/echo/a\systemctl' test8.sh
    ​
    # 4)i \text:insert,表示在匹配到的行之前追加内容
    [root@quruixiang shellstudy]# sed '3i\sys' test8.sh
    [root@quruixiang shellstudy]# sed '/echo/i\sys' test8.sh
    ​
    # 5)c \text:change,表示把匹配到的行和给定的文本进行交换
    [root@quruixiang shellstudy]# sed '/echo/c\system' test8.sh
    ​
    # 6)s/regexp/replacement/flages:查找替换,替换regexp匹配到的内容(其中/可以用其他字符代替,
    sed -i '/^SELINUX=/ s/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 
    [root@quruixiang shellstudy]# sed 's/fun/##/1' test8.sh      # 替换每行中第一个匹配的fun替换为#### 例如@)## 其他编辑命令:## 常用的flages:## g:全局替换,默认只替换第一[root@quruixiang shellstudy]# sed 's/echo/system/g' test8.sh[root@quruixiang shellstudy]# sed 's/^/##/g' test8.sh        # 文件中的每一行开头加一个##[root@quruixiang shell]# sed -i 's/^#[[:space:]]*//g' test.txt      # 删除开头#和至少一个空字符的行 ## i: 不区分大小写## p:如果成功替换则打印[root@quruixiang shellstudy]# sed 's/echo/system/p' test8.sh# 7)r 读入文件内容追加到匹配行后面
    [root@quruixiang shellstudy]# sed  'r 2.txt'  1.txt        # 在1.txt中的每一行后都写入2.txt的内容
    [root@quruixiang shellstudy]# sed '3r 2.txt'  1.txt        # 在1.txt中的第3行后写入2.txt的内容
    [root@quruixiang shellstudy]# sed  '/245/r 2.txt'   1.txt    # 在1.txt中的匹配行后写入2.txt的内容
    ​
    # 8)R 读入文件一行内容追加到匹配行后面
    # 9)y :y/source/dest/ 固定长度替换,要求替换的字符串长度相等
    # 10)w /path/to/somefile:将匹配到的文件内容追加到指定的文件末尾 
    [root@quruixiang shell]# sed -n 'w test.txt' passwd        # 在test.txt的末尾0后写入passwd的内容

4.sed扩展:

特殊符号说明
对指定行以外的所有行应用命令
=打印当前行行号
~“first~step”表示从first行开始,以步长step递增
&代表被替换的内容
;实现一行命令语句可以执行多条sed命令
{}对单个地址或地址范围执行批量操作
+地址范围中用到的符号,做加法运算
# 打印匹配到echo的行号
[root@quruixiang shellstudy]# sed -n '/echo/=' test8.sh
# 打印最后一行的行号
[root@quruixiang shellstudy]# sed -n '$=' test8.sh 
# 删除3之外的所有行
[root@quruixiang shellstudy]# sed '3!d' test8.sh    
# 删除1~3之外的所有行
[root@quruixiang shellstudy]# sed '1,3!d' test8.sh
# 删除匹配到fi到最后一行之外的所有行
[root@quruixiang shellstudy]# sed '/fi/,$!d' test8.sh
# 删除从匹配fi的行到最后一行
[root@quruixiang shellstudy]# sed '/fi/,+1d' test8.sh
# 删除匹配echo或fi的行
[root@quruixiang shellstudy]# sed '/echo\|fi/d' test8.sh
# 删除1~3行中,匹配内容bin的行
[root@quruixiang shellstudy]# sed '1,3{/bin/d}' test8.sh
# 打印匹配echo的行的行号和内容
[root@quruixiang shellstudy]# sed -n '/echo/{=;p}' test8.sh
# 打印3行到10行的内容
[root@quruixiang shell]# sed -n '3,10{=;p}' test.txt 

相关文章:

linux三剑客~sed命令的使用

1.工作原理: sed是一种流编辑器,它是文本处理中非常有用的工具 能够完美的配合正则表达式使用,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容 处理完成后&…...

virtualBox虚拟机安装多个+主机访问虚拟机+虚拟机访问外网配置

目的:本机安装3个虚拟机 一、虚拟机安装:Oracle VM VirtualBox (https://www.virtualbox.org/)源代码可下载,且免费使用 1、https://www.virtualbox.org/ 进入网站中Download 模块选择与自己电脑系统相应的下载包下载即可 如果安装过程报错如…...

正点原子嵌入式linux驱动开发——Linux按键输入

在前几篇笔记之中都是使用的GPIO输出功能,还没有用过GPIO输入功能,本章就来学习一下如果在Linux下编写GPIO输入驱动程序。正点原子STM32MP1开发板上有三个按键,就使用这些按键来完成GPIO输入驱动程序,同时利用原子操作来对按键值进…...

java--强制类型转换

类型范围大的数据或者变量,直接赋值给小范围的变量,会报错 1.强制类型转换 强行将类型范围大的变量、数据赋值给类型范围小的变量 2.强制类型转换在计算机中的执行原理 解释说明1:a是int类型有8个字节32位,然后在执行下一行代码…...

java后端调用接口Basic auth认证

该方法接收一个JSON字符串参数phoneNum 内容: {"phone":"13712312312"} 然后解析参数中的手机号,作为data去调用URL接口,接收接口返回的复合JSON并解析,拿到想要的数据public String queryUserResumeURLIn…...

App爬虫之强大的Airtest的操作总结

App爬虫之强大的Airtest的操作总结 App爬虫之强大的Airtest的操作总结 # Python使用该框架需要安装的依赖库 pip install airtest pip install poco pip install pocouifrom airtest.core.api import * from airtest.cli.parser import cli_setup from poco.drivers.android.…...

MODBUS-TCP转MODBUS-RTU通信应用(S7-1200和串口服务器通信)

在学习本博客之前,大家需要熟悉MODBUS-TCP和MODBUS-RTU通信,这2个通信的编程应用,大家可以查看下面文章链接: MODBUS-RTU通信 MODBUS-RTU通信协议功能码+数据帧解读(博途PLC梯形图代码)-CSDN博客MODBUS通信详细代码编写,请查看下面相关链接,这篇博客主要和大家介绍MODB…...

开源贡献难吗?

本文整理自字节跳动 Flink SQL 技术负责人李本超在 CommunityOverCode Asia 2023 上的 Keynote 演讲,李本超根据自己在开源社区的贡献经历,基于他在贡献开源社区过程中的一些小故事和思考,如何克服困难,在开源社区取得突破&#x…...

seata的TCC模式分析

TCC是 Try- Confirm-Cancel 这3个名词的首字母简称,是一个2阶段提交的变体思路。 Try:对资源的检查和预留; Confirm: 确认对预留资源的消耗,执行业务操作; Cancel:预留资源的释放; TCC的事务…...

常用linux命令【主要用于日志查询,目录切换】

Xshell设置登录 :主机,端口号 用户身份验证:账号/密码登录脚本:等待-[hcuserserver02 ]$ 发送-cd /data/logs/pl-capital-processer-server/$(date “%Y-%m-%d”) 下方-添加按钮/编辑 发送文本,追加 grep --color de…...

Python学习基础笔记七十六——Python装饰器2

装饰器,英文名字decorator。 我们开发Python代码的时候,经常碰到装饰器。 通常被装饰后的函数,会在原来的函数的基础上,增加一些功能。 通常装饰器本事也是一个函数,那么装饰器是怎么装饰另外一个函数的呢&#xff1f…...

生产环境解决用户登录问题的实践

目录 1 前言2 问题提出3 问题分析和解决4 技术分析和改进5 结语 1 前言 在开发管理软件平台为美术馆时,我们致力于提供一个多系统集成平台,其中包括艺术品管理、志愿者管理和数字资产管理等子系统。为了确保用户享有流畅的体验,我们采用了一…...

通讯协议学习之路:QSPI协议理论

通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374) 一、…...

pip安装修改镜像源

使用pip安装报错时,例如 raise ReadTimeoutError(self._pool, None, “Read timed out.”) pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host‘download.pytorch.org’, port443): Read timed out 可以选择国内的镜像源,如下…...

QCC51XX-QCC30XX系列开发教程(实战篇) 之 12.4-空间音频手机侧和耳机侧接口设计时序图

查看全部教程开发请点击:全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中) ==================================================================== 版权归作者所有,未经允许,请勿转载。 ==========================================...

Mysql创建视图中文乱码修改docker里的配置

问题现象: 创建的视图查询无数据,查看创建语句得知,where条件里的中文变成了“???”。 在客户端里查询字符编码: show VARIABLES like %char%;就是character_set_server导致的,它配置的竟然不是utf8,…...

uniapp checkbox样式失效,选中框选中按钮不显示

找了很多方法 最后网上一个博主找到了解决方法 在项目的main.css里面 如果你不知道你的css样式在哪个文件夹 直接全局搜索‘ 找到注释两个地方 第一个 checkbox::before 找到这一行 注释箭头指的地方就可以 第二个 checkbox .uni-checkbox-input::before, 注释这两个地方…...

机器学习-最小二乘法

概况 最小二乘法其实就是为数据(二维)拟合出一条直线,为(三维)数据拟合出一个面。来最大程度的是我们的样本点落在该直线上。 使得我们找到一条直线使所以的样本点尽可能靠近该直线,即每个样本点到直线的距离最短。 YWXB,W是权重&#xff0…...

Linux文件管理与用户管理

一、查看文件内容 1、回顾之前的命令 cat命令、tac命令、head命令、tail命令、扩展:tail -f动态查看一个文件的内容 2、more分屏显示文件内容(了解) 基本语法: # more 文件名称 特别注意:more命令在加载文件时并不…...

java中什么是不可变类

什么是不可变类 不可变类是指一旦创建对象后,其状态(属性值)就不能被修改的类。 一个不可变类具有以下特征: 类的实例变量声明为私有的,并且没有提供修改这些变量值的公共方法。类是final的,防止被继承。类的实例变量声明为fin…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

Canal环境搭建并实现和ES数据同步

作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架,开发Windows桌面应用,把一个html页面作为GUI设计放到Saucer里,隐藏掉运行时弹…...

PCA笔记

✅ 问题本质:为什么让矩阵 TT 的行列式为 1? 这个问题通常出现在我们对数据做**线性变换(旋转/缩放)**的时候,比如在 PCA 中把数据从原始坐标系变换到主成分方向时。 📌 回顾一下背景 在 PCA 中&#xff…...

AGV|无人叉车工业语音播报器|预警提示器LBE-LEX系列性能与接线说明

LBE-LEX系列AGV|无人叉车工业语音播报器|预警提示器,涵盖LBE-LEI-M-00、LBE-LESM-00、LBE-LES-M-01、LBE-LEC-M-00、LBE-KEI-M-00、LBE-KES-M-00、LBE-KES-M-01、LBE-KEC-M-00等型号,适用于各种需要语音提示的场景,主要有AGV、AMR机器人、无人…...