shell脚本四剑客--sed的应用

news2024/11/25 21:28:12

sed的介绍

sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过

需要注意,sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,则连文件都没有),而是把修改结果只显示到屏幕上,除非使用"-i"选项才会直接修改文件。

大多数小伙伴之所以觉得难,是因为sed 拥有的参数太多,实际上,我们只要学会以下参数就可以。

sed的参数导图

在这里插入图片描述

常用选项:

-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。
    但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    
-e:直接在指令列模式上进行 sed 的动作编辑;

-f:直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

-r:sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

-i:直接修改读取的档案内容,而不是由萤幕输出。

常用命令:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现;
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
d:删除,因为是删除,所以 d 后面通常不接任何字符;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作;
s:取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g!
g:是行内进行全局替换

sed工具实例

2.1 替换test.txt文本中old为new:

sed 's/old/new/g' test.txt

2.2 打印test.txt文本第一行至第三行:

sed -n '1,3p' test.txt

2.3 打印test.txt文本中首行和尾行:

sed -n '1p;$p' test.txt

2.4 删除test.txt第一行至第三行;删除匹配行至最后一行:

sed '1,3d' test.txt
sed '/测试/,$d' test.txt   

2.5 删除test.txt最后6行;删除最后一行:

for i in `seq 1 6`;do sed -i '$d' test.txt;done;
sed '$d' test.txt

2.6 在test.txt查找测试所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:

sed '/测试/aword' test.txt

2.7 在test.txt查找测试所在行,并在其上一行添加word字符,i 表示在其上一行添加字符串:

sed '/测试/iword' test.txt

2.8 在test.txt查找以测试结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:

sed 's/测试$/&word/g' test.txt

2.9 在test.txt查找测试的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:

sed '/测试/s/^/&word/' test.txt

2.10 多个sed命令组合,使用-e参数:在含测试字符的行首加1.并在结尾是检测字符处加.

sed -e '/测试/s/^/&1./' -e 's/检测$/&./g' test.txt

2.11 多个sed命令组合,使用分号“;”分割:

sed -e '/测试/s/^/&1./;s/检测$/&./g' test.txt

2.12 Sed读取系统变量,变量替换:

WEBSITE=www.test.net
sed "s/测试/$WEBSITE/g" test.txt

2.13 修改Selinux策略enforcing为disabled:

sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
sed -i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config
查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行

2.14 打印文件的行号

[root@itlaoxin41 ~]# sed -n '$=' /etc/passwd
44

总结

带的学员越多,越发现sed最难的地方不是知识本身,而是畏难情绪,总觉得一个命令弄这么多参数,这可怎么学啊。
实际上每个参数多练一练,还是很容易学会的。

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

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

相关文章

TCP协议中的几个核心特性

目录 引言 TCP协议 🍑TCP 与 UDP 的 区别 🍑TCP客户端和服务器建立连接的三次握手 🍑TCP客户端和服务器断开连接的四次挥手 🍑滑动窗口 🍑流量控制 🍑拥塞控制 引言 还记得那个经典的图吗&#x…

TCP最大连接数调优

文章目录1、单机最大TCP连接数1.1、如何标识一个TCP连接1.2、client最大tcp连接数1.3、server最大tcp连接数1.3.1、理论连接数1.3.2、实际连接数1.4、单台服务器支撑的最大TCP并发连接数1.4.1、进程限制句柄限制查看进程句柄数限制临时修改重启后失效的修改(不过我在…

IIC 通信协议 (二)

目录 引言 子模块设计 思路 单字节 IIC 发送模块 思路 Verilog 源码 多字节发送控制模块 思路 Verilog 源码 仿真 思路 test bench 仿真结果 参考声明 引言 本篇博文承接前文,继续做 IIC 通信协议 FPGA实现相关的内容。用Verilog 编写一个 IIC 通信控…

【折腾服务器 1】妖板 Intel N5105 + i226 主板安装 ESXi 7.0 教程

Catch Up 今年年初,开始搭建个人服务器,用的是一台 Dell 7010 SFF 主机,在上面部署了一些应用,例如:Calibre ,Blogs ,Minecraft Server 等。使用的是 frp 做的网络代理,有一台服务器…

cubeIDE开发, UART的CubeMX及HAL库实现原理及底层分析

一、UART通信协议 UART通用异步收发器(Universal Asynchronous Receiver and Transmitter)是STM32 上常用的串行通信外设,可以灵活地与外部设备进行全双工数据交换,需要注意区别: 【1】USART-通用同步异步收发器(Universal Synchronous Async…

<Linux线程互斥与死锁>——《Linux》

目录 1. Linux线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 互斥量的接口 初始化互斥量 销毁互斥量 互斥量加锁和解锁 互斥量实现原理探究 可重入VS线程安全 概念 常见的线程不安全的情况 常见的线程安全的情况 常见不可重入的情况 常见可重入的情况 可重…

K. Lonely Numbers(线性筛 + 差分)

Problem - 1423K - Codeforces 在数字世界中,如果两个不同的数字有很多共同点,而且每个数字都有独特的好处,那么它们就是朋友。 更确切地说,如果gcd(a,b), agcd(a,b), bgcd(a,b)能组成一个三角形的边,那么两个不同的数…

六、应用层(四)电子邮件

目录 4.1 电子邮件系统的组成结构 4.2 简单邮件传输协议(SMTP) 4.3 电子邮件格式 4.4 多用途网际邮件扩充(MIME) 4.5 邮局协议(POP3)和因特网报文存取协议(IMAP) 4.6 基…

小黑下午第一场面试被鸽,一切遇见随缘,继续第二场的leetcode之旅:654. 最大二叉树

小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def constructMaximumBinaryTree(self, nums: Li…

SAP UI5 应用里 FlexBox 控件的设计原理

sap.m.FlexBox 控件为 flexible box layout 构建容器。VBox 控件为垂直的框布局(vertical flexible box layout)构建容器。 VBox 是一种使用的控件,因为它只是一个定制化的 FlexBox 控件。 VBox 包含 items 聚合,从 FlexBox 继承而来。 HBox 控件为水平…

字符串函数

注意:MySQL中,字符串的位置是从1开始的。 ASCII(S) 返回字符串S中的第一个字符的ASCII码值. 与第一个字符后面的其他字符无关。 SELECTASCII(Abcdfsf) FROM DUAL;CHAR_LENGTH(s) 返回字符串s的字符数。作用与CHARACTER_LENGTH(s)相同。 SELECTCHAR_LEN…

生信基础知识

1.生物数据库分类 (1)核酸数据库(2)蛋白质数据库(3)专用数据库 核酸数据库分为一级核酸数据库和二级核酸数据库 蛋白质数据库分为一级蛋白质数据库和二级蛋白质数据库 一级蛋白质数据库又分为蛋白质序列…

【Redis】应用问题解决

一、缓存击穿 1、什么叫缓存击穿 系统中某个查询次数很多的热点key,在某个时刻过期,而此时又正好有大量并发请求查询这个key,但是缓存的重建还没有完成,这样,就会有大量请求涌向后端数据库,使得其压力骤增…

爱了,阿里P9开源分享内部Java核心开发手册(2022版)覆盖P5到P8

这个世界唯一不变的就是变化, IT圈子不外如是。计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术。因此,作为一名程序开发人员,我们要通过不断的学习来提高自己的技能。 所以持续学习的脚步自…

基于C++11实现的阻塞队列(BlockQueue)

思路: 生产者消费者模型如图,多个生产者线程和多个消费者线程共享同一固定大小的缓冲区,它们的生产和消费符合以下规则: 生产者不会在缓冲区满的时候继续向缓冲区放入数据,而消费者也不会在缓冲区空的时候&#xff0c…

AQS源码解读

retrantlock: A、B、C3个线程,假设A线程lock()时候拿到了锁,state被A设置成了1。 static final class NonfairSync extends Sync {private static final long serialVersionUID 7316153563782823691L;/*** Performs lock. Try immediate b…

喜欢写笔记的博主为什么要使用猿如意?

🔥🔥🔥猿如意🔥🔥🔥 喜欢写笔记的博主为什么要使用猿如意? markdown笔记 测 评 分 享 猿如意实战测评猿如意传送门什么是猿如意?猿如意使用感受markdown笔记实战测评总结猿如意传…

数据结构---红包分配算法

红包分配算法错误解法二倍均值法JAVA实现线段切割法确定每一条子线段的长度JAVA实现问题如下: 所有人抢到的金额之和要等于红包金额,不能多也不能少。每个人至少抢到1分钱。要保证红包拆分的金额尽可能分布均衡,不要出现两极分化太严重的情况…

【C函数】函数详解

函数前言一、函数是什么二、C语言中函数的分类(一)库函数1.printf类2.strcpy类3.math类4.概念5.小知识6.总结(二)自定义函数1.概念2.函数的组成3.例子1(求出两个数中的最大值)4.例子2(交换两个整…

mac释放“其他”内存空间的解决方法

官方解释Mac设备储存空间中的“其他”数据包含这不可移除的移动资源,例如,Siri 语音、字体、词典、不可移除的日志和缓存、聚焦索引以及系统数据如钥匙串和 CloudKit 数据库、系统无法删除缓存的文件等之外,还包含了一些无法识别的文件。当“…