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代码的时候,经常碰到装饰器。 通常被装饰后的函数,会在原来的函数的基础上,增加一些功能。 通常装饰器本事也是一个函数,那么装饰器是怎么装饰另外一个函数的呢?…...

生产环境解决用户登录问题的实践
目录 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是权重࿰…...

Linux文件管理与用户管理
一、查看文件内容 1、回顾之前的命令 cat命令、tac命令、head命令、tail命令、扩展:tail -f动态查看一个文件的内容 2、more分屏显示文件内容(了解) 基本语法: # more 文件名称 特别注意:more命令在加载文件时并不…...
java中什么是不可变类
什么是不可变类 不可变类是指一旦创建对象后,其状态(属性值)就不能被修改的类。 一个不可变类具有以下特征: 类的实例变量声明为私有的,并且没有提供修改这些变量值的公共方法。类是final的,防止被继承。类的实例变量声明为fin…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...