文本三剑客之sed编辑器

news2025/1/16 6:59:07

sed

  • 一、sed简介
    • 1.1 什么是sed?
    • 1.2 sed原理
    • 1.3 sed核心功能
  • 二、sed命令格式详解
    • 2.1 命令格式
    • 2.2 常用选项
    • 2.3 sed脚本语法
      • 2.3.1 基本语法结构
      • 2.3.2 地址部分-----指定匹配范围
      • 2.3.3 命令部分-----要执行的命令
  • 三、sed查找替换
    • 3.1 基本语法
    • 3.2 分组+后向引用
    • 3.3 变量调用
  • 四、sed练习

在这里插入图片描述

一、sed简介

1.1 什么是sed?

Sed是一个强大的文本处理工具,其名称是Stream Editor(流编辑器)的缩写。它被设计用于根据用户定义的规则对文本进行逐行处理和转换。

Sed通过从输入流中逐行读取文本,并根据用户指定的命令来对每一行进行处理

1.2 sed原理

sed的工作原理是逐行读取输入文本,并根据用户指定的命令对每一行进行处理,通过模式匹配和命令执行来实现文本的处理和转换。

Input Text              Pattern Space              Output Text
------------            --------------            -------------
| Line 1    |    -----> |   Pattern   |    -----> |            |
| Line 2    |           |   Space     |           | Modified   |
| Line 3    |           |             |           |   Text     |
|    ...    |           |             |           |            |
------------            --------------            -------------

“Input Text” 是输入的文本,由多行组成,每一行都会依次进入 “Pattern Space”;

“Pattern Space”是 sed 使用的缓冲区。
sed 会根据用户指定的模式(例如,文本匹配规则)进行模式匹配,然后执行相关的命令来处理当前的行。

命令执行完成后,如果有修改操作,那么 “Modified Text” 将会保存修改后的文本,最后输出作为 Sed 的结果。

1.3 sed核心功能

sed的核心功能:增删改查(可配合正则表达式)
查: p
 ​
删: d
 ​
改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)
 ​
增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)
 ​
复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)

二、sed命令格式详解

2.1 命令格式

sed [option]... 'script;script;...' [input  file...]
     选项         自身脚本语法         支持标准输入管道

2.2 常用选项

选项功能
-n不输出模式空间内容到屏幕,即不自动打印
-e多点编辑
-f FILE从指定文件中读取编辑脚本
-r或者-E使用扩展正则表达式
-i.bak备份文件并原处编辑
-s将多个文件视为独立文件,而不是单个连续的长文件流
sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd 
#把passwd文件中r为首和b为首的内容打印出来

在这里插入图片描述

2.3 sed脚本语法

2.3.1 基本语法结构

[address]<command>[options]
 匹配范围   命令      选项

address  表示要匹配的行范围,可以是单个行号、行号范围或正则表达式。
command  表示要在匹配的行上执行的命令。
options  是一些可选的参数,用于修改命令的行为。

2.3.2 地址部分-----指定匹配范围

在 sed 脚本中,地址部分用于指定要匹配的行范围。
地址部分可以是单个行号、行号范围或正则表达式。

1)不指定范围

地址部分是可选的,如果不指定地址,Sed 将对所有行都执行命令

2)单个行号

#基本格式#
sed  'n<command>' file #处理第n行的内容,n为具体正整数
#举个例子#
sed '2d' file #删除文件中的第 2 行。

3)行号范围

#基本格式#
sed 'x,y<command>' file  #处理x行到y行的内容,x和y为正整数且x<y

sed 'x,+y<command>' file #处理x行和x行后y行的内容
#举个例子#
sed '2,5d' file  #删除文件中第2行到第5行的内容

sed '2,+5d' file #删除文件中第2行到第7行的内容

4) 使用正则表达式匹配范围

#基本格式#
sed '/pattern/<command>' file #根据正则表达式来匹配目标行

sed '/pattern1/,/pattern2/<command>' file 
#匹配正则表达式1和正则表达式2间的行,并根据command进行处理

sed 'x,/pattern/<command>' file  #x行到正则表达式匹配到的行之间的内容
sed '/pattern/,y<command>' file  #正则表达式匹配到的行到y行之间的内容
#举个例子#
sed -n  '/^root/,/^byyd/p' test 

在这里插入图片描述

5)步进

'~' 符号

#怎么表示奇数行?
sed  -n '1~2p' #从第一行开始,步进为2打印,即1 3 5 7。。。
sed '0~2d'

#怎么表示偶数行?
sed  -n '2~2p' #从第二行开始,步进为2打印,即2 4 6 8。。。
sed '1~2d' 

6)最后一行和倒序匹配

`$` 符号用于表示最后一行

sed -n '$<command>' file #对最后一行进行操作

sed -n '$,$-n<command>' file #倒数第n行到最后一行
#补充知识
! 表示逻辑非操作,表示匹配不到指定的行使用 `
&& 逻辑与操作
|| 逻辑或操作

2.3.3 命令部分-----要执行的命令

命令功能
p将匹配到的行打印输出
Ip忽略大小写输出
d删除模式空间匹配的行,并立即启用下一轮循环
a\将指定的文本添加到匹配到的行后面
i\将指定的文本插入到匹配到的行前面
c\替换行为单行或多行文本
w file保存模式匹配的行至指定文件
r file读取指定文件的文本至模式空间中匹配到的行后
=为模式空间中的行打印行号
!模式空间中匹配行取反处理
q结束或退出sed
面试题
1.用sed打印到第三行

sed -n '1,3p' 文件

sed '3q'  文件 #q是自动退出,打印到第三行就退出

2.打印从第三行开始,继续往后打印三行

sed -n '3,+3p'
特殊字符和转义序列

&: 表示与模式匹配的整个文本。
\1, \2, ...: 表示与模式中括号内的子表达式匹配的文本。
\n: 表示换行符。
\t: 表示制表符。
\\: 表示反斜杠。

三、sed查找替换

3.1 基本语法

sed 's/要查找的内容/替换的内容/修饰符' 文件名 
# '/'为分隔符,可以用'@' 或者 '#'
# 要查找的内容可以用正则表达式 
# 替换的内容无法用正则表达式

# 修饰符 #
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写
sed -i 's/r..t/&er/g'  /etc/passwd
# &代指前面找到的内容

3.2 分组+后向引用

分组(Grouping)
通过将模式的一部分放入一个分组中,可以将这部分模式视为一个单元,后续可以通过引用该分组在替换中使用。

后向引用(Backreference)
在替换中使用前面定义的分组的内容。在sed命令中,可以使用 \数字的形式引用分组,其中数字表示分组的顺序

在替换中使用\1来引用第一个分组的内容。如果有多个分组,可以使用\2、\3等来引用后续分组的内容。

#举个例子#

echo 123abcxyz | sed -nr 's/(123)(abc)(xyz)/\1/p'
# -n 关闭自动打印 -r 使用扩展正则表达式
# 123分成1组  abc分组第二组  xyz分成第三组 
# \1/p 表示打印第一组

在这里插入图片描述

示例一:仅显示本机IP地址

ifconfig ens33 | sed -nr 's/.*inet (.*)  netmask.*/\1/p'

在这里插入图片描述
示例二:仅显示tmp文件的权限

stat tmp | sed -nr  '4s/.*\(([0-9]+)\/.*/\1/p'
# ( 和 \ 需要转译

在这里插入图片描述

3.3 变量调用

sed允许使用变量来替代文本中的特定部分。
需要先定义变量。

name=root #定义变量
sed -nr '/'$name'/p' /etc/passwd #打印出包含root的内容
或者
sed -nr /"$name"/p /etc/passwd

在这里插入图片描述

四、sed练习

示例一:增加内容( a i c )
都是临时添加

sed  '2,4ihello world' /test/passwd #在第2-4行前面添加 

在这里插入图片描述

sed '2ahello wold\n' /test/passwd #在第二行后面添加并回车

在这里插入图片描述

sed '$ahello' /test/passwd #最后一行后

在这里插入图片描述

sed '/stu0/a hello world;3p;3i shell' /test/passwd 
#a后面的内容都会被视为添加内容

在这里插入图片描述

示例二:多点编辑

sed -n -e '1p' -e '3p' /test/passwd

在这里插入图片描述

示例三:分组操作

sed -ne '/root/{s/root/ROOT/;s/x/X/g}' -ne '1,10p' /test/passwd
#/root所在行/ {将所在行的root替换成ROOT x替换成X}  打印1-10行    

在这里插入图片描述

示例四:搜索替换

#1-5行的开头加上#
sed  -n '1,5s/^/#/gp' /test/passwd
#g为全局替换

在这里插入图片描述

示例五:删除

sed '/nologin/d' /test/passwd #删除包含nologin的

在这里插入图片描述

示例六:仅提取日志文件中的IP地址和时间戳

cat log | sed -nr 's/(.*) - - \[(.*) +.*\] .*/\1 \2/p'

在这里插入图片描述

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

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

相关文章

.NET应用UI组件DevExpress XAF v23.1 - 全新的日程模块

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在新版中…

【爬虫练习之glidedsky】爬虫-基础2

题目 链接 爬虫往往不能在一个页面里面获取全部想要的数据&#xff0c;需要访问大量的网页才能够完成任务。 这里有一个网站&#xff0c;还是求所有数字的和&#xff0c;只是这次分了1000页。 思路 找到调用接口 可以看到后面有个参数page来控制页码 代码实现 import reques…

Python功能制作之简单的3D特效

需要导入的库&#xff1a; pygame: 这是一个游戏开发库&#xff0c;用于创建多媒体应用程序&#xff0c;提供了处理图形、声音和输入的功能。 from pygame.locals import *: 导入pygame库中的常量和函数&#xff0c;用于处理事件和输入。 OpenGL.GL: 这是OpenGL的Python绑定…

win10下IDEA搭建web项目脚手架

参考 IDEA运行Maven项目配置全过程(菜鸟专属)_idea配置maven_Hi梅的博客-CSDN博客 下载 IDEA 下载JDK 1.8 https://pan.baidu.com/s/1lj2na9omGwhPrCKYNz1qSQ 提取码:izkj 点击exe一步步next 添加环境变量: JAVA_HOME 对于自己jdk的路径 添加系统变量PATH:%JAVA_H…

混杂接口模式---vlan

策略在两个地方可以用--1、重发布 2、bgp邻居 2、二层可以干的&#xff0c;三层也可以干 3、未知单播&#xff1a;交换机的MAC地址表的记录保留时间是5分钟&#xff0c;电脑的ARP表的记录保留时间是2小时 4、route recursive-lookup tunnel 华为默认对于bgp学习来的路由不开启标…

在Hive/Spark上执行TPC-DS基准测试 (PARQUET格式)

在上一篇文章:《在Hive/Spark上运行执行TPC-DS基准测试 (ORC和TEXT格式)》中,我们介绍了如何使用 hive-testbench 在Hive/Spark上执行TPC-DS基准测试,同时也指出了该项目不支持parquet格式。 如果我们想要生成parquet格式的测试数据,就需要使用其他工具了。本文选择使用另…

深入了解Maven(一)

目录 一.Maven介绍与功能 二.依赖管理 1.依赖的配置 2.依赖的传递性 3.排除依赖 4.依赖的作用范围 5.依赖的生命周期 一.Maven介绍与功能 maven是一个项目管理和构建工具&#xff0c;是基于对象模型POM实现。 Maven的作用&#xff1a; 便捷的依赖管理&#xff1a;使用…

[.NET/WPF] CommunityToolkit.Mvvm 异步指令

我们在开发中, 经常会有这样的需求: 点击按钮后, 进行一些耗时的工作工作进行时, 按钮不可再次被点击工作进行时, 会显示进度条, 或者 “加载中” 的动画 RelayCommand CommunityToolkit.Mvvm 中的 RelayCommand 除了支持最简单的同步方法, 还支持以 Task 作为返回值的异步方…

开源语音聊天软件Mumble

网友 大气 告诉我&#xff0c;Openblocks在国内还有个版本叫 码匠&#xff0c;更贴合国内软件开发的需求&#xff0c;如接入了国内常用的身份认证&#xff0c;接入了国内的数据库和云服务&#xff0c;也对小程序、企微 sdk 等场景做了适配。 在 https://majiang.co/docs/docke…

WooCommerce Product Bundles电商网站产品捆绑包

WooCommerce Product Bundles电商网站产品捆绑包是用于 WooCommerce 的最灵活、最强大的产品捆绑工具包&#xff0c;为数以千计的成功商店提供支持。它的产品分组、定价和运输功能旨在确保它在广泛的用例中发挥出色。很少有产品包无法处理的情况&#xff01; 网址&#xff1a;W…

基于Simulink的Chaos混沌电路设计与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 07_001m 4.算法理论概述 混沌电路是一类特殊的非线性电路&#xff0c;其输出信号表现出无规律…

黑马点评-项目集成git及redis实现短信验证码登录

目录 IDEA集成git 传统session存在的问题 redis方案 业务流程 选用的数据结构 整体访问流程 发送短信验证码 获取校验验证码 配置登录拦截器 拦截器注册配置类 拦截器 用户状态刷新问题 刷新问题解决方案 IDEA集成git 远程仓库采用码云&#xff0c;创建好仓库&…

【STM32】FreeRTOS软件定时器学习

软件定时器 FreeRTOS提供了现成的软件定时器功能&#xff0c;可以一定程度上替代硬件定时器&#xff0c;但精度不高。 实验&#xff1a;创建一个任务&#xff0c;两个定时器&#xff0c;按键开启定时器&#xff0c;一个500ms打印一次&#xff0c;一个1000ms打印一次。 实现&…

C++快速回顾(一)

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。C/C是音视频必…

大型集团企业数字化管控平台及信息化治理服务体系建设方案PPT

导读&#xff1a;原文《大型集团企业数字化管控平台及信息化治理服务体系建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以点…

B站视频码率用户上传视频的视频码率

一般来说&#xff0c;B站用户可以根据自己的视频内容和需求来选择视频的码率&#xff0c;但以下是一些常见的视频码率范围&#xff0c;供用户参考&#xff1a; 标清&#xff08;SD&#xff09;&#xff1a; 码率范围可能在500 Kbps至1.5 Mbps左右&#xff0c;适用于480p的分辨率…

Vue的鼠标键盘事件

Vue的鼠标键盘事件 原生 鼠标事件(将v-on简写为) click // 点击 dblclick // 双击 mousedown // 按下 mousemove // 移动 mouseleave // 离开 mouseout // 移出 mouseenter // 进入 mouseover // 鼠标悬浮mousedown.left 键盘事件 keydown //键盘按下时触发 keypress …

Kick Back Relax:Learning to Reconstruct the World by Watching SlowTV

参考代码&#xff1a;slowtv_monodepth 这篇文章提出了一种在无标定数据集上自监督估计深度的方法&#xff0c;也就是通过网络预测的方式估计相机的内参&#xff0c;从而完成自监督流程。为了验证在无相机标定情况下实现自监督深度估计&#xff0c;从网络上下载了一些视频构建…

板卡常用前端 数据表操作

两年前写的&#xff0c;现在看,有点想吐, 数据操作表,调试设备用 采用外挂的方法&#xff0c;以前设备的接口命令,简易&#xff0c;换个UI展示很容易 自己写着玩的,公司部分产品再用,前端展示,不涉密 index.html <!doctype html> <html><head><meta chars…

vue根据template结构自动生成css/scss/less样式嵌套

vscode搜索安装插件&#xff1a;AutoScssStruct4Vue