Shell之sed
sed是什么
Linux sed 命令是利用脚本来处理文本文件。 可依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed命令详解
语法
sed [-hnV][-e <script>][-f<script文件>][文本文件]
sed [-nefr] [动作]
参数
-e<script>或–expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-h或–help 显示帮助。
-n或–quiet或–silent 仅显示script处理后的结果。
动作
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作。通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g
高级子命令
高级子命令比较少,但是比较复杂,平时用的也会相对少些,却也很重要,有的内容处理不用高级子命令是完成不了的。
n:读入下一行到模式空间,例:’4{n;d}’ 删除第5行。
N:追加下一行到模式空间,再把当前行和下一行同时应用后面的命令。
P:输出多行模式空间的第一部分,直到第一个嵌入的换行符位置。在执行完脚本的最后一个命令之后,模式空间的内容自动输出。P命令经常出现在N命令之后和D命令之前。
D:删除模式空间中第一个换行符的内容。它不会导致读入新的输入行,相反,它返回到脚本的顶端,将这些指令应用与模式空间剩余的内容。这3个命令能建立一个输入、输出循环,用来维护两行模式空间,但是一次只输出一行。
例子1:
sed 'N;$!P;D' a.txt
#说明:删除文件倒数第二行
例子2:
sed 'N;! P ; !P;!P;!D;$d' a.txt
例子
#在 testfile 文件的第四行后添加一行
sed -e 4a\newLine testfile
#将 testfile 的内容列出并且列印行号,同时,请将第 2~5 行删除!
nl testfile | sed '2,5d'
#要删除第 3 到最后一行:
nl testfile | sed '3,$d'
#第二行后(即加在第三行) 加上test 字样
nl testfile | sed 'test'
#第二行前 加上test 字样
nl testfile | sed '2i drink tea'
#要增加两行以上,在第二行后面加入两行字,例如 test0 与 test1?
nl testfile | sed '2a test0\
test1'
#取代2到5行的内容
nl testfile | sed '2,5c No 2-5 number'
#列出 testfile 文件内的第 5-7 行
nl testfile | sed -n '5,7p'
#搜索 testfile 有 oo 关键字的行
nl testfile | sed -n '/oo/p'
#删除 testfile 所有包含 oo 的行,其他行输出
nl testfile | sed '/oo/d'
#数据的搜寻并执行命令
#搜索 testfile,找到 oo 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把 oo 替换为 kk,再输出这行。最后的 q 是退出。
nl testfile | sed -n '/oo/{s/oo/kk/;p;q}' #数据的查找与替换
#除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的查找与替换。sed 的查找与替换的与 vi 命令类似,语法格式如下:
sed 's/要被取代的字串/新的字串/g'
#将 testfile 文件中每行第一次出现的 oo 用字符串 kk 替换,然后将该文件内容输出到标准输出:
sed -e 's/oo/kk/' testfile
#g 标识符表示全局查找替换,使 sed 对文件中所有符合的字符串都被替换,修改后内容会到标准输出,不会修改原文件:
sed -e 's/oo/kk/g' testfile
#选项 i 使 sed 修改文件:
sed -i 's/oo/kk/g' testfile
#批量操作当前目录下以 test 开头的文件:
sed -i 's/oo/kk/g' ./test*#样本 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
#将 IP 前面的部分予以删除:
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
#将 IP 后面的部分予以删除:
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'#多点编辑
一条 sed 命令,删除 testfile 第三行到末尾的数据,并把 HELLO 替换为 test
nl testfile | sed -e '3,$d' -e 's/HELLO/test/'#直接修改文件内容
#sed 将 regular_express.txt 内每一行结尾若为.则换成!
sed -i 's/\.$/\!/g' regular_express.txt
#利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test:
sed -i '$a # This is a test' regular_express.txt
#把hello换成A保存到file.txt,同时会以file.txt.bak文件备份原来未修改文件内容,以确保原始文件内容安全性,防止错误操作而无法恢复原来内容。
sed –i.bak 's/hello/A/' file.txt
echo “hello world” | sed -r 's/(hello)|(world)/A/g'
#将第2-4行中hello字符串替换为A,其它行如果有hello也不会被替换。
sed –n '2,4s/hello/A/' message
#从第2行开始,再接着往下数4行,也就是2-6行,这些行会把hello字符替换为A。
sed –n '2,+4s/hello/A/' message
#第4行开始,到第6行。解释6的由来,"4,~3"表示从4行开始到下一个3的倍数,这里从4开始算,那就是6了,当然9就不是了,因为是要求3的第一个超过前边数字4的倍数
sed –n '4,~3s/hello/A/' message
#从第4行开始,每隔3行就把hello替换为A。比如从4行开始,7行,10行等依次+3行。这个比较常用,比如3替换为2的时候,也就是每隔2行的步调,可以实现奇数和偶数行的操作。
sed –n '4~3s/hello/A/' message
#!符号表示取反,该命令是将除了第1行,其它行hello替换为A,上述定址方式也可以使用!符号
sed -n '1!s/hello/A/' message
#将匹配到nihao的行执行删除操作。
sed -n '/nihao/d' message
#删除空行
sed -n '/^$/d' message
#说明:匹配以TS开头的行到TE开头的行之间的行,把匹配到的这些行删除。
sed -n '/TS/,/TE/d' message
#匹配从第1行到TS开头的行,把匹配的行删除
sed -n '1,/^TS/d' message
#将从TS开头的行到TE开头的行之间范围的行内容中CN替换为China,并且把Beijing替换为BJ,类似于多命令之间用分号的那种方式,不过这样定址代码只写了一遍,相当于执行了一条子命令。
/TS/,/TE/{
s/CN/China/
s/Beijing/BJ/
}
sed -n `2,3s{/cn/china/;/a/b/}` message
#将message文件中1-2行的下边分别添加3行,3行内容分别是A、B、C,这里使用了\n,插入多行内容都可以按照这种方式来实现。
sed `1,2a A\nB\nC` messagecat message
hello 123 world
#将message每行包含的第一个hello的字符串替换为HELLO,这是最基本的用法。
sed 's/hello/HELLO/' message
#用了扩展正则表达式,需要加-r选项。结果:A
sed -r 's/[a-z]+ [0-9]+ [a-z]+/A/' message
#结果:hello 123 world
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/\1\2\3/' message
#\1表示正则第一个分组结果,\2表示正则匹配第二个分组结果,\3表示正则匹配第三个分组结果。结果:world 123 hello
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/\3\2\1/' message
# &表示正则表达式匹配的整个结果集。结果:hello 123 world
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/&/' message
#在匹配结果前后分别加了111、222。结果:111hello 123 world222
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/111&222/' message
#在message文件中每行的首尾分别加上111、222。
sed -r 's/.*/111&222/' message
#把message文件中每行的所有i字符替换为A,默认不加g标记时只替换每行的第一个字符。
sed 's/i/A/g' message
#把message文件中每行的第2个i字符替换为A。
sed 's/i/A/2' message
#加-p标记会把被替换的行打印出来,再加上-n选项会关闭模式空间打印模式,因此该命令的效果就是只显示被替换修改的行。
sed -n 's/i/A/p' message
#把message文件中内容的每行第一个字符i替换为A,然后把修改内容另存为b.txt文件。
sed -n 's/i/A/w b.txt' message
#把message文件中每一行的第一个i或I字符替换为A字符,也即是忽略大小写。
sed -n 's/i/A/i' message#删除文件每行的第二个字符。
sed -r 's/(.*)(.)$/\1/'
#删除文件每行的最后一个字符。
sed -r 's/(.*)(.)$/\1/'
#删除文件每行的倒数第2个单词。
sed -r 's/(.)([a-Z]+)([a-Z]+)([a-Z]+)([a-Z]+)([^a-Z]$)/\1\2\4\5/' /etc/passwd
#交换每行的第一个字符和第二个字符。
sed -r 's/(.)(.)(.*)/\2\1\3/' /etc/passwd
#交换每行的第一个单词和最后一个单词。
sed -r 's/([a-Z]+)([a-Z]+)(.*)([a-Z]+)([a-Z]+)([^a-Z]*$)/\5\2\3\4\1\6/' /etc/passwd
#删除一个文件中所有的数字。
sed 's/[0-9]//g' /etc/passwd
#用制表符替换文件中出现的所有空格。
sed -r 's/ +/\t/g' /etc/passwd
#把所有大写字母用括号()括起来。
sed -r 's/([A-Z])/(\1)/g' /etc/passwd
#打印每行3次。
sed 'p;p' /etc/passwd
#隔行删除
sed '0~2{=;d}' /etc/passwd
#把文件从第22行到第33行复制到56行后面。
sed '22h;23,33H;56G' /etc/passwd
#把文件从第22行到第33行移动到第56行后面。
sed '22{h;d};23,33{H;d};56g' /etc/passwd
#只显示每行的第一个单词。
sed -r 's/([a-Z]+)([^a-Z]+)(.*)/\1/' /etc/passwd
#打印每行的第一个单词和第三个单词。
sed -r 's/([a-Z]+)([a-Z]+)([a-Z]+)([a-Z]+)([a-Z]+)([^a-Z]+)(.*)/\1\t\5/' /etc/passwd
#将格式为mm/yy/dd的日期格式换成 mm;yy;dd
date `+%m/%y/%d' | sed 's///;/g'
相关文章:
Shell之sed
sed是什么 Linux sed 命令是利用脚本来处理文本文件。 可依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 sed命令详解 语法 sed [-hnV][-e <script>][-f<script文件>][文本文件] sed [-nefr] [动作…...

AJAX——认识URL
1 什么是URL? 统一资源定位符(英语:Uniform Resource Locator,缩写:URL,或称统一资源定位器、定位地址、URL地址)俗称网页地址,简称网址,是因特网上标准的资源的地址&…...
《Docker极简教程》--Docker环境的搭建--在Linux上搭建Docker环境
更新系统:首先确保所有的包管理器都是最新的。对于基于Debian的系统(如Ubuntu),可以使用以下命令:sudo apt-get update sudo apt-get upgrade安装必要的依赖项:安装一些必要的工具,比如ca-certi…...

开源微服务平台框架的特点是什么?
借助什么平台的力量,可以让企业实现高效率的流程化办公?低代码技术平台是近些年来较为流行的平台产品,可以帮助很多行业进入流程化办公新时代,做好数据管理工作,从而提升企业市场竞争力。流辰信息专业研发低代码技术平…...
C#系列-C#操作UDP发送接收数据(10)
在C#中,发送UDP数据并接收响应通常涉及创建两个UdpClient实例:一个用于发送数据,另一个用于接收响应。以下是发送UDP数据并接收响应的示例代码: 首先,我们需要定义一个方法来发送UDP数据,并等待接收服务器…...
突破编程_C++_面试(基础知识(10))
面试题29:什么是嵌套类,它有什么作用 嵌套类指的是在一个类的内部定义的另一个类。嵌套类可以作为外部类的一个成员,但它与其声明类型紧密关联,不应被用作通用类型。嵌套类可以访问外部类的所有成员,包括私有成员&…...

初步探索Pyglet库:打造轻量级多媒体与游戏开发利器
目录 pyglet库 功能特点 安装和导入 安装 导入 基本代码框架 导入模块 创建窗口 创建控件 定义事件 运行应用 程序界面 运行结果 完整代码 标签控件 常用事件 窗口事件 鼠标事件 键盘事件 文本事件 其它场景 网页标签 音乐播放 图片显示 祝大家新…...

【npm】安装全局包,使用时提示:不是内部或外部命令,也不是可运行的程序或批处理文件
问题 如图,明明安装Vue是全局包,但是使用时却提示: 解决办法 使用以下命令任意一种命令查看全局包的配置路径 npm root -g 然后将此路径(不包括node_modules)添加到环境变量中去,这里注意,原…...

Go 语言 for 的用法
For statements 本文简单翻译了 Go 语言中 for 的三种用法,可快速学习 Go 语言 for 的使用方法,希望本文能为你解开一些关于 for 的疑惑。详细内容可见文档 For statements。 For statements with single condition 在最简单的形式中,只要…...

熵权法Python代码实现
文章目录 前言代码数据熵权法代码结果 前言 熵权法做实证的好像很爱用,matlab的已经实现过了,但是matlab太大了早就删了,所以搞一搞python实现的,操作空间还比较大 代码 数据 import pandas as pd data [[100,90,100,84,90,1…...

浏览器提示ERR_SSL_KEY_USAGE_INCOMPATIBLE解决
ERR_SSL_KEY_USAGE_INCOMPATIBLE报错原因 ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误通常发生在使用 SSL/TLS 连接时,指的是客户端和服务器之间进行安全通信尝试失败,原因是证书中的密钥用途(Key Usage)或扩展密钥用途(Extended Key Usage, EKU)与正在尝试的操作不兼容。这意味…...
使用深度学习进行“序列到序列”分类
目录 加载序列数据 定义 LSTM 网络架构 测试 LSTM 网络 此示例说明如何使用长短期记忆 (LSTM) 网络对序列数据的每个时间步进行分类。 要训练深度神经网络以对序列数据的每个时间步进行分类,可以使用“序列到序列”LSTM 网络。通过“序列到序列”LSTM 网络,可以对…...
Python和Java的区别(不断更新)
主要通过几个方面区分Python和Java,让大家有一个对比: 语言类型 Java是一种静态类型、编译型语言。 Python是一种动态类型、解释型语言,注重简洁和灵活的语法。 语法 在Java中,变量需要显式地声明,指定其类型。例如&am…...

Ubuntu22.04 gnome-builder gnome C 应用程序习练笔记(三)
八、ui窗体创建要点 .h文件定义(popwindowf.h), TEST_TYPE_WINDOW宏是要创建的窗口样式。 #pragma once #include <gtk/gtk.h> G_BEGIN_DECLS #define TEST_TYPE_WINDOW (test_window_get_type()) G_DECLARE_FINAL_TYPE (TestWindow, test_window, TEST, WI…...

vue electron 应用在windows系统上以管理员权限打开应用
打开package.json文件,在build下的win增加配置 "requestedExecutionLevel": "requireAdministrator",...
c实现链表
目录 c实现链表 链表的结构定义: 链表的结构操作: 1、初始化链表 2、销毁链表 3、插入结点 4、输出链表数据 5、查找链表数据 扩展 代码实现 c实现链表 链表的结构定义: /*** 链表结构定义 ***/ typedef struct Node {int data; //…...

力扣231. 2 的幂(数学,二分查找,位运算)
Problem: 231. 2 的幂 文章目录 题目描述思路即解法复杂度Code 题目描述 思路即解法 思路1:位运算 1.易验证2的幂为正数; 2.易得2的幂用二进制表示只能有一个位为数字1 3.即将其转换为二进制统计其二进制1的个数 思路2:数学 当给定数n大于1时…...

Maven私服部署与JAR文件本地安装
Nexus3 是一个仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。 平常我们在获取 maven 仓库资源的时候,都是从 maven 的官方(或者国内的镜像)获取。团队的多人员同样的依赖都要从远程获取一遍,从网络方…...

【MySQL】字符串函数的学习
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-J7VN4RbrBi51ozap {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...

AI助力农作物自动采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建作番茄采摘场景下番茄成熟度检测识别计数分析系统
去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物,专家设计出来了很多用于采摘不同农作物的大型机械,看着非常震撼,但是我们国内农业的发展还是相对比较滞后的࿰…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...