Shell三剑客之sed

前言:

       Shell三剑客是grep、sed和awk三个工具的简称,因功能强大,使用方便且使用频率高,因此被戏称为三剑客,熟练使用这三个工具可以极大地提升运维效率。

       sed是一个流编辑器,用于对文本进行编辑、替换、删除等操作。sed通过读取、执行和显示三个过程来工作,可以在无交互的情况下实现复杂的文本处理操作。

一、sed命令参数描述

1.sed命令选项

-n 不打印所有行到标准输出
-e 表示将下一个字符串解析为sed命令,如果只传递一个编辑命令给sed,-e选项可以省略
-f 表示正在调用sed脚本文件

2.sed命令定位文本的方法

x                    x为指定行号
x,y                  指定从x到y的行号范围
/pattern/            查询包含模式的行
/pattern/pattern/    查询包含两个模式的行
/pattern/,x          从与pattern的匹配行到x号行之间的行
x,/pattern/          从x号行到与patter匹配的行之间的行
x,y!                 查询不包括x和y行号的行

3.sed编辑命令 

p   打印匹配行
=   打印文件行号
a\  在定位行号之后追加文本信息
i\  在定位行号之前插入文本信息
d   删除定位行
c\  用新文本替换定位文本
s   使用替换模式替换相应模式
r   从另一个文件中读文本
w   将文本写入到一个文件
y   变换字符
q   第一个模式匹配完成后推出
l   显示与八进制ACSII码等价的控制字符
{}  在定位行执行的命令组
n   读取下一个输入行,用下一个命令处理新的行
h   将模式缓冲区的文本复制到保持缓冲区
H   将模式缓冲区的文本追加到保持缓冲区
x   互换模式缓冲区和保持缓冲区的内容
g   将保持缓冲区的内容复制到模式缓冲区
G   将保持缓冲区的内容追加到模式缓冲区

二、sed应用举例

1.sed命令选项举例

sed编辑命令p实现打印匹配行,-n表示不打印所有行

#查看文件全部内容
[root@test02 ~]# cat a.txt 
#sfsd
fsjdf
fdfs#执行sed命令带-n选项,只打印文本第一行
[root@test02 ~]# sed -n '1p' a.txt 
#sfsd#执行sed命令不带-n选项,打印文本第一行和文本全部内容
[root@test02 ~]# sed '1p' a.txt    
#sfsd
#sfsd
fsjdf
fdfs#打印范围行,1到2行
[root@test02 ~]# sed -n '1,2p' a.txt 
#sfsd
fsjdf#利用/pattern/进行模式匹配,且匹配是大小写敏感的
[root@test02 ~]# sed -n '/fsjdf/p' a.txt    
fsjdf
[root@test02 ~]# sed -n '/sfsd/p' a.txt      
#sfsd

sed -e用法

#-e表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以忽略。
#只有项sed传递多个编辑命令时,-e才有用武之地#打印行号命令
[root@test02 ~]# sed -n '/sfsd/=' a.txt  
1
[root@test02 ~]# sed -n '/fsjdf/=' a.txt  
2
#打印行的内容及行号
[root@test02 ~]# sed -n -e '/fsjdf/p' -e '/fsjdf/=' a.txt   
fsjdf
2

 sed -f选项

#-f选项只有调用sed脚本文件时才起作用,
#追加文本格式
#sed '指定地址a\追加文本' 操作文件[root@test02 ~]# cat append.sed 
#!/bin/sed -f
/my/a\
we append a new line#在my关键字这一行之后追加文本
[root@test02 ~]# ./append.sed a.txt 
#sfsd
what is your name
my name is Andy Law
we append a new line
zhen ta ma caodan!
fsjdf
fdfsaaaa

2.sed文本定位举例

匹配元字符需使用转义字符“\”

#匹配元字符
[root@test02 ~]# sed -n '/\!/p' a.txt 
zhen ta ma caodan!
#sed命令可以正则表达式可以匹配元字符,$正则中表示行尾,sed中表示最后一行,最后一行为空行
[root@test02 ~]# sed -n '$p' a.txt#打印1到2行之外的行
[root@test02 ~]# sed -n '1,2!p' a.txt   
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs#打印匹配关键字my到最后一样
[root@test02 ~]# sed -n '/my/,$p' a.txt     
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfsaaaa
#打印第2行到my关键字匹配的行
[root@test02 ~]# sed -n '2,/my/p' a.txt 
what is your name
my name is Andy Law

3.sed基本编辑命令举例

插入命令i\

#sed编辑命令插入文本的符号为i\,插入文本的格式为:
sed '指定地址i\插入文本' 输入文件[root@test02 ~]# cat insert.sed 
#!/bin/sed -f
/my/i\                          
we insert a new line            [root@test02 ~]# ./insert.sed a.txt 
#sfsd
what is your name
we insert a new line
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfsaaaa

修改文本 c\

#sed编辑命令的修改文本符号为c\,格式为:
sed '指定地址c\更换文本' 输入文件[root@test02 ~]# cat modify.sed 
#!/bin/sed -f
/my/c\
we modify this line
[root@test02 ~]# ./modify.sed a.txt 
#sfsd
what is your name
we modify this line
zhen ta ma caodan!
fsjdf
fdfsaaaa

删除文本d

#sed编辑命令删除文本符号为d,格式为:
sed '指定地址d' 操作文件[root@test02 ~]# cat a.txt 
#sfsd
what is your name
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfsaaaa
[root@test02 ~]# sed '2d' a.txt 
#sfsd
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfsaaaa
#删除最后一行
[root@test02 ~]# sed '$d' a.txt  
#sfsd
what is your name
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs
#删除5到最后一行
[root@test02 ~]# sed '5,$d' a.txt 
#sfsd
what is your name
my name is Andy Law
zhen ta ma caodan!

 替换文本s

#sed编辑命令替换文本的符号为s,格式为:
sed 's/被替换文本/新替换文本/[替换选项]' 输入文本g          表示替换文本中所有出现被替换字符串之处
p          与-n选项结合,只打印替换行
w 文件名   表示将输出定向到一个文件[root@test02 ~]# sed 's/my/your/' a.txt     
#sfsd
what is your name
your name is Andy Law
zhen ta ma caodan!
fsjdf
fdfsaaaa

写入一个新的文件

#写入文本符号w,格式为:
sed '指定地址 w 文件名' 操作文件#将a.txt文件1到3行生成新文件输入到nuw.txt
[root@test02 ~]# sed -n '1,3 w new.txt' a.txt
[root@test02 ~]# cat new.txt 
#sfsd
what is your name
my name is Andy La[root@test02 ~]# sed -n '/my/ w new.txt' a.txt   
[root@test02 ~]# cat new.txt 
my name is Andy Law

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

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

相关文章

LeetCode2095删除链表的中间节点

题目描述 给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。对于 n 1、…

深入探索Android签名机制:从v1到v3的演进之旅

引言 在Android开发的世界中,APK的签名机制是确保应用安全性的关键环节。随着技术的不断进步,Android签名机制也经历了从v1到v3的演进。本文将带你深入了解Android签名机制的演变过程,揭示每个版本背后的技术细节,并探讨它们对开…

浅谈下MYSQL表设计的几条规则

作为后端开发人员,避免不了和数据库打交道,可是我们怎么能够设计出高效,可维护,可扩展的数据库设计呢,在这里我总结了几个点,供大家参考。 在写之前,可能需要重复下数据库设计的范式原则&#…

docker-compose.yml文件详解

创建 docker-compose.yml 文件是使用 Docker Compose 管理多容器应用的第一步。这个 YAML 格式的文件详细描述了服务、网络和卷等组件以及它们之间的关系。下面是对一个典型 docker-compose.yml 文件结构的详解: 基本结构 一个基本的 docker-compose.yml 文件通常…

水雨情监测系统—实时监测水位信息

TH-SW3水雨情监测系统是一种专门用于实时监测和收集水文气象数据的自动化系统。它能够实时获取区域内降雨和水情数据,并将其存储到数据库中进行分析处理,从而为防汛指挥人员提供及时准确的信息服务。 水雨情监测系统的主要功能包括实时监测水位、流速、流…

C++类与对象基础探秘系列(二)

目录 类的6个默认成员函数 构造函数 构造函数的概念 构造函数的特性 析构函数 析构函数的概念 析构函数的特性 拷贝构造函数 拷贝构造函数的概念 拷贝构造函数的特性 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰类的成员函数 取地址及const取地址操作…

MySQL文档_下载

可能需要:MySQL下载–》更新版本–》迁移数据库到MySQL 以下都不重要【只要确定好需要安装版本,找到对应的版本下载,安装,设置即可】 下载、安装: Determine whether MySQL runs and is supported on your platform…

iCloud如何高效利用:提升苹果生态体验

iCloud如何高效利用:提升苹果生态体验 引言 iCloud是苹果公司提供的云服务,它允许用户在苹果设备之间无缝同步数据和内容。随着数字化生活的不断发展,有效地管理和利用iCloud对于提高工作效率和生活质量变得越来越重要。本文将详细介绍如何…

Debian12安装后更换为国内镜像源,切换root用户,解决用户名不在sudoers文件中此事将被报告

选择Debian作为编程开发最佳Linux的理由: Debian是面向程序员的最古老,最出色的Linux发行版之一。Debian提供了具有.deb软件包管理兼容性的超稳定发行版。Debian为程序员提供了许多最新功能。因此,它具有一个特殊的编程空间。Debian是开发人员…

弥合孤岛:克服构建 DevOps 文化的挑战

持续变革正在发生软件开发行业。DevOps 因其对自动化、协作和持续改进的关注而成为优化软件交付并弥合开发和运营团队之间鸿沟的重要方法。然而,过渡到真正的 DevOps 文化并非没有挑战。本文探讨了您在追求 DevOps 时可能面临的障碍并提供了解决方案。 01 了解 Dev…

数据结构 顺序表1

1. 何为顺序表: 顺序表是一种线性数据结构,是由一组地址连续的存储单元依次存储数据元素的结构,通常采用数组来实现。顺序表的特点是可以随机存取其中的任何一个元素,并且支持在任意位置上进行插入和删除操作。在顺序表中&#xf…

算法-卡尔曼滤波之基本数学的概念

1.均值 定义:均值是一组数据中所有数值的总和除以数据的数量。均值是数据的中心趋势的一种度量,通常用符号 xˉ 表示。 :对于包含 n 个数据的数据集 {𝑥1,𝑥2,...,𝑥𝑛},均值 xˉ 计…

Spring原理

目录 一、Bean作用域 1、Bean作用域概念 2、Bean的六种作用域 3、举例演示bean的几种作用域 二、Bean的生命周期 1、Bean对象的生命周期 2、演示Bean对象的生命周期 三、SpringBoot的自动配置 1、概念 2、spring将对象存入容器中的原理 一、Bean作用域 在前面spring…

C语言(指针)7

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

程序设计语言理论中的“类型系统”与“类型论”及其示例

程序设计语言理论中的“类型系统”与“类型论”及其示例 在程序设计语言理论中,“类型系统”和“类型论”是两个核心概念。它们不仅关系到程序的安全性、可读性和优化,还为新的编程范式和工具的开发提供了理论基础。接下来,我们将通过简单示…

6款日常精选手机APP推荐!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.全能相机软件——无他相机 无他相机App是一款完全免费且功能全面的美颜相机软件。这款相机应用集自拍、美颜、图片编辑、风格化模板、流行贴…

springboot+vue+mybatis台球俱乐部管理系统的设计与实现+PPT+论文+讲解+售后

随着信息技术在管理上越来越深入而广泛的应用,作为一般的台球厅都会跟上时代的变化,用上计算机来代表重复性的劳动,并且给用户一种新奇的感受,实现台球俱乐部系统 在技术上已成熟。本文介绍了台球俱乐部系统 的开发全过程。通过分…

k8s v1.20二进制部署 部署 CNI 网络组件 部署 Calico

一、部署 flannel 1.1.K8S 中 Pod 网络通信 ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。…

InternLM-XComposer2-4KHD开拓性的4K高清视觉-语言模型

大型视觉-语言模型(LVLM)在图像字幕和视觉问答(VQA)等任务中表现出色。然而,受限于分辨率,这些模型在处理包含细微视觉内容的图像时面临挑战。 分辨率的限制严重阻碍了模型处理含有丰富细节的图像的能力。…

springboot3.x集成Elasticsearch8.5.3

1. 前言 项目基础为springboot3.0.2,目标是实现Elasticsearch的自定义高亮分页查询,网上提供的方法都是通过继承ElasticsearchRepository实现相关的查询,但是当我查询条件过多且复杂的时候方法命名会非常长,所以暂时弃用&#xf…